java 语法:“同步 (this)”

2022-09-01 03:06:32

你能给我解释一下这段java代码吗?我无法理解这种语法。

synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
}

答案 1

这意味着这个代码块意味着不超过一个线程能够访问该块内的代码。synchronized

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

这是我在Kathy Sierra的java认证书中发现的。

由于同步确实会损害并发性,因此您不希望同步超出保护数据所需的代码。因此,如果方法的范围超出需要的范围,则可以将同步部分的范围缩小到比完整方法小的东西 - 只是一个块。

请看下面的代码片段:

public synchronized void doStuff() {
    System.out.println("synchronized");
}

可以改为:

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
   }
}

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


答案 2
synchronized (this)

是实现块级同步的语法。

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

在此处查看更详细的答案:块级同步