我创建了一个程序,它创建了1000个线程,每个线程将1加入到变量sum中。 我的问题是我得到的输出只有1秒。
以下是该计划:
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方法,我只得到1秒。 我在这做错了什么? (新线程很难理解错误)
感谢您的时间。
答案 0 :(得分:7)
您的每个Threading
对象都有自己的sumObject
实例,具有自己的值
他们彼此无关。
修复后,您会发现您的代码完全不是线程安全的 在1,000个不同的对象上进行同步根本无法解决这个问题。同步单个对象将完全破坏线程的目的。