本帖最后由 土突突 于 2014-5-3 12:21 编辑
无意中写错了一个程序,但是从中发现了一点问题,代码如下:
- class JoinDemo
- {
- public static void main(String[] args)
- {
- Textt t1=new Textt();
- Test t2=new Test();
- Thread th1=new Thread(t1);
- Thread th2=new Thread(t2);
- th2.start();
- try{th1.join();} catch(InterruptedException e){System.out.println(e);}
- th1.start();
- }
- }
- class Textt implements Runnable
- {
- public void run()
- {
- for(int i=0;i<100;i++)
- System.out.println(Thread.currentThread().getName()+"-------run--------"+i);
- }
- }
- class Test implements Runnable
- {
- public void run()
- {
- for(int i=0;i<100;i++)
- System.out.println(Thread.currentThread().getName()+"-------------run--------"+i);
- }
- }
复制代码 如上,本来在主函数中想先调用两个线程的start()方法,然后再th1.join( )看下效果。结果写成了上述代码。运行后发现两个线程仍然能交替运行。
在此有点小疑问。以下是我的个人看法...
th2先启动,当执行到th1的join()方法时主线程以及th2应该等待至th1执行完毕。但此时th1线程并没有被启动。还不具有抢夺CPU的能力。此时要么出现未知异常,要么程序会卡在此处一直等待th1的执行。
为什么还会一直出现两个线程交替运行的情况呢?
|