在多线程中往往用到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()先后顺序是否起作用了!