创建1000个线程以更改变量值

时间:2013-09-01 13:17:09

标签: java multithreading synchronization thread-synchronization

我创建了一个程序,它创建了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秒。 我在这做错了什么? (新线程很难理解错误)

感谢您的时间。

1 个答案:

答案 0 :(得分:7)

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

修复后,您会发现您的代码完全不是线程安全的 在1,000个不同的对象上进行同步根本无法解决这个问题。同步单个对象将完全破坏线程的目的。