join()方法
面试点
线程A,执行了线程B(对象)的join()方法,线程A必须要等待B执行完成了以后,线程A才能继续自己的工作。
线程休眠辅助工具类
package com.xiangxue.tools;
import java.util.concurrent.TimeUnit;
/**
*
*
*类说明:线程休眠辅助工具类
*/
public class SleepTools {
/**
* 按秒休眠
* @param seconds 秒数
*/
public static final void second(int seconds) {
try {
TimeUnit.SECONDS.sleep(seconds);
} catch (InterruptedException e) {
}
}
/**
* 按毫秒数休眠
* @param seconds 毫秒数
*/
public static final void ms(int seconds) {
try {
TimeUnit.MILLISECONDS.sleep(seconds);
} catch (InterruptedException e) {
}
}
}
演示下join方法的使用
package com.xiangxue.ch1;
import com.xiangxue.tools.SleepTools;
/**
*
*
*类说明:演示下join方法的使用
*/
public class UseJoin {
//内部类
static class JumpQueue implements Runnable {
private Thread thread;//用来插队的线程
public JumpQueue(Thread thread) {
this.thread = thread;
}
@Override //覆写
public void run() {
try {
System.out.println(thread.getName()+" will be join before "
+Thread.currentThread().getName());
thread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" terminted.");
}
}
public static void main(String[] args) throws Exception {
Thread previous = Thread.currentThread();//现在是主线程
for (int i = 0; i < 10; i++) {
//i=0,previous 是主线程,i=1;previous是i=0这个线程
Thread thread =
new Thread(new JumpQueue(previous), String.valueOf(i));
System.out.println(previous.getName()+" jump a queue the thread:"
+thread.getName());
thread.start();
previous = thread;
}
SleepTools.second(6);//让主线程休眠6秒
System.out.println(Thread.currentThread().getName() + " terminate.");
}
}
控制台打印输出