我有一个计算类。我创建了两个线程,它们都在此类的不同实例上工作,并尝试获取 i 的值。但两者都给了我相同的值(value)观。
我希望如果一个实例的一个线程正在工作,那么在其他实例上工作的线程应该等待。
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();
}
}
最佳答案
使 i
为静态。如果你想在线程之间共享变量。并同步 showNumber 方法而不是Calculate.class,以便一次只有 1 个线程运行它。
关于java - 多线程 - 同步对象的所有实例的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22745989/