黑马程序员技术交流社区

标题: 请教个多线程join问题 [打印本页]

作者: 谭荣强    时间: 2014-2-27 00:21
标题: 请教个多线程join问题
我在t2.start(); 前开始可了t2.join();此时主函数应该等待t2执行完,但是t2还没开起,主线程已经等待,岂不是死循环了。但运行结果是三个线程交替。为什么啊
class demo implements Runnable
{
        public void run()
        {
                for (int x =0;x<70 ;x++ )
                {
                        System.out.println(Thread.currentThread().getName()+"..."+x);
                }
        }
}
class day1209
{
        public static void main(String[] args) throws Exception
        {
                demo d =new demo();
                Thread t1 = new Thread(d);
                Thread t2 = new Thread(d);
                t1.start();
                t2.join();// 此处没用啊
                t2.start();

                for (int x =0;x<60 ;x++ )
                {
                        System.out.println("main"+x);
                }
               
        }
}

作者: 榨菜    时间: 2014-2-27 01:16
t2.start();
t2.join();//调换下位置

join()
主线程等待线程终止。t1.join();   这句就是t1要cpu执行权。主线程就把执行权放了。t1执行完了,主线程才恢复过来。

作者: qqwwdr    时间: 2014-2-27 09:21
线程4种运行状态
        被创建
        运行
        睡眠
        (阻塞:临时状态 )
        终结
t2  都不具备运行的能力 ,
你调用t2.join(),t2就无法获得main的cup执行权,那么main就依然持有cpu执行权,
即使t2获得了main的cpu执行权,t1依然可以运行,
举个例子:
       你人都不在船上,船长想把船舵让给你爽一下,怎么让,没得让。

作者: 谭荣强    时间: 2014-2-27 09:50
明白了 多谢
作者: 平凡成就非凡    时间: 2014-2-27 09:50
线程必须先开启,t2.start( ).才能进行进行其他操作。t2.join( ),是加入获取运行资格,并拥有执行权。此时主线程main和其他线程将等待。直到t2执行完,主线程或其他线程才能执行。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2