首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个简单的多线程有关问题

2011-12-25 
一个简单的多线程问题publicclassThreadTestimplementsRunnable{intapublicvoidrun(){for(a0a 10a++)

一个简单的多线程问题
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啊

[解决办法]
多个线程共用同一个run指向的对象,当a=9的时候,循环结束,可能这个时候其他5个线程也运行到a=9,然后大家一起自加1,结果a一下子变成14了,当各个线程再次循环的时候,a已经14了,所以抛出异常,虚拟机终止运行。。
a可能的取值范围应该是[10,15]。一般13,14,15会多一些
[解决办法]
这涉及到线程的并发和同步,除非你先控制了线程等级,第一线程+1,然后第二线程再+1,以为刚开始的时候,他们等级是相同的,还有一个问题你机器是不是双核,如果是双核就会出现线程同时进行的问题,当然这并不能算做错误,只不过代码没有处理到这块,或者你手动指定所有线程等级.有更好方法的,大家也来讨论一下!

热点排行