读书人

线程同步的有关问题求解

发布时间: 2014-01-25 22:37:26 作者: rapoo

线程同步的问题求解


import java.util.ArrayList;
import java.util.List;

public class TestThread {

public static void main(String[] args) {
List list = new ArrayList();
list.add(10000);

for(int i = 0; i < 10; i++) {
new Thread(new SubThread(list)).start();
}

System.out.println(list.get(0));
}
}

class SubThread implements Runnable {
private List list;

public SubThread(List list) {
this.list = list;
}

public void run() {
for(int i = 0; i < 1000; i++) {
synchronized (list) {
this.list.set(0, (int)this.list.get(0)-1 );
}
}
}
}


代码很简单,只是想问下,为什么结果不为零?该如何改?
[解决办法]
多线程,自然就是异步执行的了,你启动了10个子线程,但主线程依然会往下执行,所以你10个子线程还没执行完,主线程已经执行到 System.out.println(list.get(0));了。自然打印出来的就不是0了。
如果非要打印出0,那就给每个子线程取个名字,然后调用,线程的join方法,等待线程结束,不过你这里也失去了使用多线程的意义了。
[解决办法]
你延时几秒再打印,就是0了

读书人网 >J2SE开发

热点推荐