A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-2-27 00:21  /  932 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我在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);
                }
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
t2.start();
t2.join();//调换下位置

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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 1 0
明白了 多谢
回复 使用道具 举报
线程必须先开启,t2.start( ).才能进行进行其他操作。t2.join( ),是加入获取运行资格,并拥有执行权。此时主线程main和其他线程将等待。直到t2执行完,主线程或其他线程才能执行。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马