天天看点

线程阻塞工具类LockSupport

 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();
        }

    }
}
           

继续阅读