LockSupport是一个线程阻塞工具,它可以在线程内的任意位置让线程阻塞,和Thread.suspend()相比,它弥补了resume()在前发生导致线程无法继续执行的情况,和Object.wait()相比它也不需要获取某个对象锁。LockSupport使用了类似信号量的机制,它为每一个线程准备了一个许可,如果该许可可用,会立即返回,并且消费这个许可,如果许可不可用,线程就会阻塞
代码实例如下:
package me.lishuo;
import java.util.concurrent.locks.LockSupport;
import java.util.concurrent.locks.ReentrantLock;
/**
* @date 2018/7/21 下午5:10
*/
public class LockSupportDemo{
public static Object obj =new Object();
static ThreadInfo obj1=new ThreadInfo("obj1");
static ThreadInfo obj2=new ThreadInfo("obj2");
public static class ThreadInfo extends Thread{
public ThreadInfo(String name){
super(name);
}
public void run(){
synchronized (obj){
System.out.println();
LockSupport.park("name"+getName());
}
}
}
public static void main(String args[]){
try{
obj1.start();
Thread.sleep(100);
obj2.start();
LockSupport.unpark(obj1);
LockSupport.unpark(obj2);
obj1.join();
obj2.join();
}catch (Exception e){
e.printStackTrace();
}
}
}