我有一个类作为计算。我创建了两个线程,它们都在这个类的不同实例上工作,并试图获得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();
}
}
答案 0 :(得分:1)
将i
设为静态。如果要在线程之间共享变量。并同步showNumber方法而不是Calculate.class,这样一次只能运行一个线程。