0

我创建了一个创建 1000 个线程的程序,每个线程将 1 添加到变量 sum 中。我的问题是我得到的输出只有 1s。

这是程序:

class Threading implements Runnable{

    T6_Q1 sumObject=new T6_Q1();

    Thread t;

    Threading(){
        t=new Thread(this);
        t.start();
    }

    @Override
    public void run() {

        setSumValue();

        System.out.println(sumObject.getSum());   
    }


   public void setSumValue(){
        Integer value=sumObject.getSum().intValue()+1;

        sumObject.setSum(value);

    }
}

public class T6_Q1
{


Integer sum =new Integer(0);

public void setSum(int value){
   this.sum=new Integer(value);
}

//method to get the sum value
public Integer getSum(){
    return this.sum;
}

public static void main(String[] args) {

   //launches 1000 threads
    for(int i=1;i<=1000;i++)
    {
    new Threading();
    }

}
}

即使我同步了 setSumValue 方法,我也只能得到 1s。我在这里做错了什么?(我是线程新手,所以仍然有点难以理解错误)

感谢您的时间。

4

1 回答 1

7

您的每个Threading对象都有自己的sumObject实例,具有自己的值。
他们彼此没有任何关系。

一旦你解决了这个问题,你会发现你的代码是完全非线程安全的。
同步 1,000 个不同的对象根本无法解决这个问题;在单个对象上同步将完全破坏线程的目的。

于 2013-09-01T13:20:36.183 回答