多线程 - 为对象的所有实例同步块

时间:2014-03-30 15:40:01

标签: java multithreading

我有一个类作为计算。我创建了两个线程,它们都在这个类的不同实例上工作,并试图获得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();
    }
}

1 个答案:

答案 0 :(得分:1)

i设为静态。如果要在线程之间共享变量。并同步showNumber方法而不是Calculate.class,这样一次只能运行一个线程。