2017-11-04 152 views
0

有两个线程。一个是操纵x,另一个是显示x。如何使用同步,中断,等待和通知来互相排斥。图像显示了这一点。互斥使用等待,同步,中断和通知

Execution image

我已经想出了这个解决方案,但如果它的正确IAM不能肯定。

synchronized(x){ 
    x = x + 1; 
    notify(); 
    try{ 
     wait(); 
    } 
    catch(InterruptedException e){ 
    } 
} 

synchronized(x){ 

    try{ 
     wait(); 
    } 
    catch(InterruptedException e){ 
    } 
    System.out.print(x); 
} 

回答

0

您已经使用了synchronized(x) {}关闭,以确保这不会发生。你在做什么是正确的。如果你的语句是在一个单独的方法中,你也可以使你的方法同步,以便它不会受到影响,直到它离开这个方法。

public synchronized void doSmth() { 
    //do smth; 
}