LockSupport工具类

LockSupport工具类

主要用来,阻塞和唤醒线程,可以方便的用来实现线程间的通信,

public class LockDemo {
    static final Logger LOGGER = LoggerFactory.getLogger(LockDemo.class);
    static volatile Object result = null;

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(()->{getResult();});
        thread.start();
        TimeUnit.SECONDS.sleep(3);
        result = "hello";
        LOGGER.info("set result = [{}]",result);
//        thread.interrupt();
        LockSupport.unpark(thread);

    }
    public static  void getResult(){
        // 非条件满足的唤醒,仍然等待
        while(result == null){
           LockSupport.park();
        }
        LOGGER.info("get result:[{}]",result);
    }
}

如上,所示:创建了一个线程thread,thread需要获取result的值。然鹅result的初始状态为null,只有当main线程将其初始化后,thread才可以拿到其值,也就是说thread需要等待main线程对result进行初始化后,才能继续执行,即是线程之间的一种协作,或者通信。
因为线程调用 LockSupport.park()后,进入阻塞状态,然而线程的中断也可以使得线程唤醒,因此在线程唤醒后,需要重复判断条件,以免非条件满足的唤醒。 需要使用while循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值