She*_*n.W 0 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使我同步setSumValue方法我只得到1s.我在这做错了什么?(我很新线程所以仍然有点难以理解错误)
感谢您的时间.
每个Threading对象都有自己的sumObject实例,具有自己的值.
他们彼此无关.
一旦解决了这个问题,您就会发现您的代码完全不是线程安全的.
在1,000个不同的对象上进行同步根本无法解决这个问题.同步单个对象将完全破坏线程的目的.
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |