黑马程序员技术交流社区
标题:
多线程join的问题
[打印本页]
作者:
joechen
时间:
2013-10-30 17:23
标题:
多线程join的问题
想问一下t1.start();t2.start();t1.join()在如下代码的执行顺序
class JoinDemo
{
public static void main(String[] args) throws InterruptedException
{
Demo d=new Demo();
Thread t1=new Thread(d);
Thread t2=new Thread(d);
t1.start();
t2.start();
t1.join() ; // t1 t2交替执行,直到t1执行完毕 ?
// 先 t1 t2交替执行,在调用t1.join()后只执行t1?
for (int x=0;x<50 ;x++ )
{System.out.println("hello world");
}
}
}
class Demo implements Runnable
{
public void run()
{
for (int x=0;x<60 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"---run"+x);
}
}
}
作者:
靓仔
时间:
2013-10-30 17:49
刚开始执行主线程时,t1和t2都参与了当执行了t1.join时,主线程停止,这时只有t1和t2在抢夺cpu执行权,当t1执行完毕后,主线程才开始执行,如果t2还没有执行完,这时主线程就和t2就互相抢夺cpu执行权了
join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。
作者:
joechen
时间:
2013-10-30 17:52
靓仔 发表于 2013-10-30 17:49
刚开始执行主线程时,t1和t2都参与了当执行了t1.join时,主线程停止,这时只有t1和t2在抢夺cpu执行权,当t1 ...
谢谢了,:lol
作者:
Jim-剣◆﹏
时间:
2013-10-30 19:59
查了书
正确的执行顺序是
先 t1 t2交替执行,假设此时t1打印到了10,t2打印到了12
在调用t1.join()后,此时t1从10一直占据CPU的执行权,从11一直输出到50,输出完毕后,t2再接着从12开始输出...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2