java的语法:“同步(这)”

问题描述 投票:12回答:6

可以请你给我解释一下这段java代码?我无法理解这样的语法。

synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
}
java syntax synchronized
6个回答
25
投票

这意味着,这个代码块是synchronized意义不超过一个线程可以访问该块中的代码。

此外this意味着你可以在当前实例(获取当前实例锁)进行同步。

这是我在凯西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)

是语法来实现块级同步。

这意味着,在qazxsw POI对象只和只有一个线程可以在同一时间执行所述封闭块。

在这里寻找更详细的解答:this


0
投票
Block level synchronization

其所谓的synchronized块,它可以选择它的同步哪些对象。一个同步方法只可以使用“这”(或相应的类实例为同步类方法) 看看这些链接可能是它会给你更好的答案。

  1. synchronized (this) { }
  2. Java synchronized blocks

0
投票

同步(这) - 我们获得与对象相关联的锁指出,“本”。当我们使用这个块,我们的意思是,我们都愿意等到使用这种显示器的线,将其释放。这是有道理的使用锁,如果你改变了数据对象(该对象的变量)。

等待 - 使当前执行的线程等待,直到另一个线程调用notify方法或指定的时间。


0
投票

此第一线控制到代码的封闭块的并行访问。一次只能有一个线程可以同时执行的代码块。阅读第synchronized block vs synchronized method?的2.2的更多信息

this tutorial

下面所附的代码块似乎使用暂停执行的线程的给定时间量的(非常差)方法。

synchronized (this) {

另外它是“吞噬”可能在观望,这是非常确实调皮的过程中抛出的异常。


-1
投票

在大多数情况下,只有一个线程可以在同一时间访问“同步(本)”。但是,这并不总是正确的!考虑下面的代码。在我的代码同步的静态对象作为锁,一切工作正常。当我改变的代码在(这)多个线程同时访问代码同步,它搅乱一切。上(这)仔细同步。注:该代码创建线程递归然后将它们显示顺序相反。

Main

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

Threads2

public class Project2 
{
    public static void main(String[] args) throws InterruptedException 
    {
        Object lock = new Object();
        Threads2 t1 = new Threads2(1);
        t1.setName("Thread 1");
        t1.start();
        Threads2.que.add(t1);
        t1.join();
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.