我有一个类作为计算。我创建了两个线程,都在这个类的不同实例上工作,并尝试获取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 –