在线程中使用synchronized

Kev*_*oyd 1 java synchronized keyword

以下是什么可以理解?
我在SO上经历过这篇文章,但仍然无法组装它.

代码1:

synchronized(this){ 
// some code
}
Run Code Online (Sandbox Code Playgroud)

码2:

Object lock = new Object();

synchronized(lock){
// some code
}
Run Code Online (Sandbox Code Playgroud)

任何教程,或一些解释同步的链接,就像他们向孩子解释一样?

Zed*_*Zed 6

基本上,Java中的每个对象都有一个"锁".

当一个线程到达synchronized(某事)的调用时,它必须在继续之前获取某些内容的锁定.如果你想一次只允许一个线程来修改对象的状态,最明显的事情就是同步该对象的锁定.如果允许并行调用不同的方法,则需要使用不同的锁.

如果您编写synchronized(this)或简单地同步,则线程必须获取与当前对象关联的锁(调用哪种方法).

请注意,自Java 5.0以来,并发包提供了可用于代替同步的正确.