我有一個類作爲計算。我創建了兩個線程,都在這個類的不同實例上工作,並嘗試獲取i的值。但是兩者都給了我相同的價值觀。多線程 - 同步一個對象的所有實例的塊
我想如果一個實例的一個線程正在工作,那麼在其他實例上工作的線程應該等待。
public class Calculate {
private int i=2;
public void showNumber(){
synchronized(Calculate.class){
i=i+2;
}
System.out.println(Thread.currentThread()+"Value of i is "+i);
}
}
class Test1 implements Runnable{
Calculate c=null;
public Test1(Calculate c){
this.c=c;
}
@Override
public void run() {
System.out.println(Thread.currentThread()+" Running");
c.showNumber();
}
}
public class ThreadingPractise {
public static void main(String[] args) {
Calculate c=new Calculate();
Calculate c1=new Calculate();
Thread t1=new Thread(new Test1(c),"t1");
Thread t2=new Thread(new Test1(c1),"t2");
t1.start();
t2.start();
}
}
你如何讓事情等待/阻止?什麼代碼應該等待? –
這裏我創建了Calculate類的兩個實例,並且兩個線程都在獨立實例上工作,所以我獲得了變量i的相同值。但我想如果一個線程正在工作,那麼其他實例的其他線程應該得到更新值 –
無處不在,我得到的是,如果你在類級別獲取鎖,那麼同步塊將由一個線程訪問該對象的每個實例。 請參閱http://programmers.stackexchange.com/questions/206732/how-to-make-a-method-synchronized-across-all-instances-of-an-object –