在多线程中往往用到join()的方法,join()是什么呢?
Thread类的Join()措施能够将两个交替厉行的线程并合为次序厉行的线程。例如在线程B中调用了线程A的Join()措施,线程A将插入线程B之前,直到线程A厉行告终后,才会继续厉行线程B。
代码如下:
package com.cn.process; public class test { /** * @param args */ public class hello implements Runnable { @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 3; i++) { System.out.println(Thread.currentThread().getName()+i); } } } public static void main(String[] args) throws InterruptedException { String threadName = Thread.currentThread().getName(); test test=new test(); hello he=test.new hello(); Thread demo = new Thread(he,"线程");//第二个参数是线程名称(自定义) demo.start();//调用start方法但是调用该方法只是准备线程并不是马上启动 demo.join(); //强制执行demo,只有当demo线程执行结束之后主线程才能继续当前主线程执行--相当于在主线程中添加了demo的子线程, 使异步执行线程转为同步执行 //demo.start();//join()方法在start()前后显示的结果明显的不一样 可以证明只有当start()启动后 才能正确执行join() for(int i=0;i<50;++i) { System.out.println(threadName +"线程执行-->"+i); } } }
执行的结果是:
线程0
线程1
线程2
main线程执行-->0
main线程执行-->1
main线程执行-->2
main线程执行-->3
main线程执行-->4
main线程执行-->5
main线程执行-->6
main线程执行-->7
main线程执行-->8
main线程执行-->9
main线程执行-->10
main线程执行-->11
main线程执行-->12
main线程执行-->13
main线程执行-->14
main线程执行-->15
main线程执行-->16
main线程执行-->17
main线程执行-->18
main线程执行-->19
main线程执行-->20
main线程执行-->21
main线程执行-->22
main线程执行-->23
main线程执行-->24
main线程执行-->25
main线程执行-->26
main线程执行-->27
main线程执行-->28
main线程执行-->29
main线程执行-->30
main线程执行-->31
main线程执行-->32
main线程执行-->33
main线程执行-->34
main线程执行-->35
main线程执行-->36
main线程执行-->37
main线程执行-->38
main线程执行-->39
main线程执行-->40
main线程执行-->41
main线程执行-->42
main线程执行-->43
main线程执行-->44
main线程执行-->45
main线程执行-->46
main线程执行-->47
main线程执行-->48
main线程执行-->49
ok 成功 起到了join的作用!
当我注释掉前面的start()的时候,
以下是代码片段:
//demo.start();//调用start方法但是调用该方法只是准备线程并不是马上启动
demo.join(); //强制执行demo,只有当demo线程执行结束之后主线程才能继续当前主线程执行--相当于在主线程中添加了demo的子线程, 使异步执行线程转为同步执行
demo.start();//join()方法在start()前后显示的结果明显的不一样 可以证明只有当start()启动后 才能执行join() 也就是说 当join()在前面的话就失去了意义
执行结果可能是(cpu有关):
线程0
main线程执行-->0
main线程执行-->1
main线程执行-->2
main线程执行-->3
main线程执行-->4
main线程执行-->5
main线程执行-->6
main线程执行-->7
main线程执行-->8
main线程执行-->9
线程1
线程2
main线程执行-->10
main线程执行-->11
main线程执行-->12
main线程执行-->13
main线程执行-->14
main线程执行-->15
main线程执行-->16
main线程执行-->17
main线程执行-->18
main线程执行-->19
main线程执行-->20
main线程执行-->21
main线程执行-->22
main线程执行-->23
main线程执行-->24
main线程执行-->25
main线程执行-->26
main线程执行-->27
main线程执行-->28
main线程执行-->29
main线程执行-->30
main线程执行-->31
main线程执行-->32
main线程执行-->33
main线程执行-->34
main线程执行-->35
main线程执行-->36
main线程执行-->37
main线程执行-->38
main线程执行-->39
main线程执行-->40
main线程执行-->41
main线程执行-->42
main线程执行-->43
main线程执行-->44
main线程执行-->45
main线程执行-->46
main线程执行-->47
main线程执行-->48
main线程执行-->49
这就可以看出了 join()先后顺序是否起作用了!