黑马程序员技术交流社区
标题:
请教个多线程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