LockSupport

2021-03-12  本文已影响0人  kakukeme

LockSupport简介

LockSupport用来实现线程的挂起和唤醒,它是Java6引入的一个工具类,它简单灵活,应用广泛,同时也是构建同步组件的基础工具。

LockSupport API

// 阻塞当前线程,调用unpark(Thread thread)方法或者当前线程被中断,才能从park返回
void park()
// 阻塞当前线程但时间不超过nanos纳秒
void parkNanos(long nanos)
// 阻塞当前线程直到deadline时间(从1970开始到deadline时间毫秒数)
void parkUntil(long deadline)
// 唤醒处于阻塞状态的线程
void unpark(Thread thread)

// java6增加了以下3个方法
void park(Object blocker)

void parkNanos(Object blocker,long nanos)

void parkUntil(Object blocker,long deadline)

用于实现阻塞当前线程的功能,blocker用于标识当前线程正在等待的对象(阻塞对象),该对象主要用于给开发人员提供阻塞对象的信息,有助于问题排查和系统监控。

Object等待唤醒wait/notify/notifyAll

// object wait notify
public static void main(String[] args) throws InterruptedException {
        final Object obj = new Object();
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    synchronized (obj){
                        obj.wait();
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
                System.out.println("go here");
            }
        });
        thread.start();
        Thread.sleep(1000);
        synchronized (obj){
            obj.notify();
        }
    }

// 上述睡眠一秒钟,保证线程thread阻塞在wait方法,若此处注释,主线程先notify,
// 可能程序一直处于wait等待状态,所以必须先阻塞后notify。
// 可见Object的wait与notify的调用是有先后顺序的。

LockSupport阻塞唤醒park/unpark

public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    LockSupport.park();
                }catch (Exception e){
                    e.printStackTrace();
                }
                System.out.println("go here");
            }
        });
        thread.start();
        LockSupport.unpark(thread);
    }

// LockSupport支持主线程先调用unpark后,线程thread再调用park而不被阻塞。

总结一下,LockSupport与Object(wait/notify)不同点:

原文链接:https://blog.csdn.net/jiangtianjiao/article/details/86693898

上一篇 下一篇

猜你喜欢

热点阅读