当前页面: 开发资料首页 → J2SE 专题 → 请教,为什么线程非安全的还是正确的结果
请教,为什么线程非安全的还是正确的结果
摘要: 请教,为什么线程非安全的还是正确的结果
class ThreadTest1 implements Runnable {
int i = 0;
public void run() {
++i;
System.out.println(i);
}
}
class www {
public static void main(String[] args) {
ThreadTest1 t = new ThreadTest1();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
也算是种巧合吧,我觉得。
其原因可能在于
第一,那两行代码根本用不完一个CPU的时间片就可以执行完毕,所以出现问题的情况太难碰到了。
第二,那两行代码的执行时间远远小于系统创建并启动一个新线程的时间,所以下一个线程被创建好之前,人家可能早就结束了大半天了,导致想看看出问题的情况就更难了。
int i = 0;改成Integer就可以看到效果了