最近在读海子的线程总结(http://www.cnblogs.com/dolphin0520/p/3920357.html),这里从他文章里做下整理:
线程join例子
package com.hcj.threadPool;
public class MyTask5 {
public static void main(String[] args) {
System.out.println("进入线程" + Thread.currentThread().getName());
MyTask5 myTask5 = new MyTask5();
MyThread myThread = myTask5.new MyThread();
//给线程命名
myThread.setName("mythread线程");
myThread.start();
try {
System.out.println("线程" + Thread.currentThread().getName()+"等待");
myThread.join();
System.out.println("线程" + Thread.currentThread().getName()+"继续执行");
} catch (Exception e) {
e.printStackTrace();
}
}
class MyThread extends Thread{
@SuppressWarnings("static-access")
@Override
public void run(){
System.out.println("进入线程" + Thread.currentThread().getName());
try {
//休眠5秒
Thread.currentThread().sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程" + Thread.currentThread().getName() + "执行完毕");
}
}
}
执行结果如下:
实际上调用join方法是调用了Object的wait方法,这个可以通过查看源码得知:
wait方法会让线程进入阻塞状态,并且会释放线程占有的锁,并交出CPU执行权限。
由于wait方法会让线程释放对象锁,所以join方法同样会让线程释放对一个对象持有的锁。