一个简单的多线程问题

haoguicai000 2007-07-27 06:09:23
public class ThreadTest implements Runnable {
int a;
public void run() {
for(a=0;a<10;a++){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName() + " a=" + a);
}
}

public static void main(String[] args) {
ThreadTest run=new ThreadTest();
Thread thread1=new Thread(run);
Thread thread2=new Thread(run);
Thread thread3=new Thread(run);
Thread thread4=new Thread(run);
Thread thread5=new Thread(run);
Thread thread6=new Thread(run);
thread6.start();
thread1.start();
thread2.start();
thread3.start();
thread4.start();
thread5.start();

}
}
为什么会输出到a=14啊
...全文
178 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdl2000 2007-07-27
  • 打赏
  • 举报
回复
这涉及到线程的并发和同步,除非你先控制了线程等级,第一线程+1,然后第二线程再+1,以为刚开始的时候,他们等级是相同的,还有一个问题你机器是不是双核,如果是双核就会出现线程同时进行的问题,当然这并不能算做错误,只不过代码没有处理到这块,或者你手动指定所有线程等级.有更好方法的,大家也来讨论一下!
feihua317 2007-07-27
  • 打赏
  • 举报
回复
多个线程共用同一个run指向的对象,当a=9的时候,循环结束,可能这个时候其他5个线程也运行到a=9,然后大家一起自加1,结果a一下子变成14了,当各个线程再次循环的时候,a已经14了,所以抛出异常,虚拟机终止运行。。
a可能的取值范围应该是[10,15]。一般13,14,15会多一些

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧