java语法:"synchronized(this)"

19 java syntax synchronized

能告诉我这段java代码吗?我无法理解这种语法.

synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
}
Run Code Online (Sandbox Code Playgroud)

Abu*_*kar 29

这意味着这段代码synchronized意味着只有一个线程能够访问该块内的代码.

this意味着您可以在当前实例上进行同步(获取当前实例的锁定).

这就是我在Kathy Sierra的java认证书中找到的.

由于同步确实会损害并发性,因此您不希望同步任何超出保护数据所需的代码.因此,如果方法的范围超出需要,则可以将同步部分的范围缩小到小于完整方法的范围 - 仅限于块.

请查看以下代码段:

public synchronized void doStuff() {
    System.out.println("synchronized");
}
Run Code Online (Sandbox Code Playgroud)

可以更改为:

public void doStuff() {
   //do some stuff for which you do not require synchronization
   synchronized(this) {
     System.out.println("synchronized");
     // perform stuff for which you require synchronization
   }
}
Run Code Online (Sandbox Code Playgroud)

在第二个代码段中,同步锁仅应用于该代码块而不是整个方法.


Azo*_*ous 6

synchronized (this)
Run Code Online (Sandbox Code Playgroud)

是实现块级同步的语法

这意味着this只能在对象上并且一次只有一个线程可以执行封闭的块。

在这里查看更详细的答案:块级同步