多线程中join的理解

来源:互联网 发布:mysql批量替换字符串 编辑:程序博客网 时间:2024/05/16 09:01

join方法:当在某个程序执行流中调用其他线程的join方法时,调用线程将被阻塞,知道新join进来的线程执行完成为止。

谁是调用线程?

在本例中,main线程就是调用线程。

谁是被调线程?

在本例中,线程2就是被调线程,即新join进来的线程。

public class JoinThread extends Thread {@Overridepublic void run() {for (int i = 0; i < 5; i++) {System.out.println(getName() + "\t" + i);}}//有参构造public JoinThread(String name) {super(name);}public static void main(String[] args) throws Exception {//主线程main启动时就创建一个新的线程,线程1,线程1将会和主线程(main)并发执行new JoinThread("线程1").start();for (int j = 0; j < 5; j++) {if(j == 3){//再启动新的线程,线程2,join进来JoinThread jt = new JoinThread("线程2");jt.start();//main线程调用了线程2的join,//则main线程必须等到线程2执行完成后才向下执行,//此时只有线程1和线程2并发执行jt.join();}System.out.println(Thread.currentThread().getName() + "\t" + j);}}}

执行结果:

main 0
main 1
main 2
线程1 0
线程1 1
线程1 2
线程1 3
线程2 0
线程1 4
线程2 1
线程2 2
线程2 3
线程2 4
main 3
main 4

从结果可以看出,当main线程启动时,便开启了新的线程,线程1, 此时系统中两个线程并发执行,当j=3时, 启动线程2,join进来,相当于main线程调用了线程2 的join方法,main线程被阻塞,此时只有线程1和线程2并发执行,直到线程2执行完毕后,main线程才能继续执行。

 

 

 

 

0 0
原创粉丝点击