LockSupport线程之间的通讯

LockSupport是JDK中比较底层的类,用来创建锁和其他同步工具类的基本线程阻塞原语。
LockSupport很类似于二元信号量(只有1个许可证可供使用),如果这个许可还没有被占用,
当前线程获取许可并继续执行;如果许可已经被占用,当前线程阻塞,等待获取许可。通过网上一些对LockSupport的源码分析可知,
其实现是通过调用本地代码(C++)来做的,具有很强的OS平台相关性,因此性能应该是非常高的。
对于JVM应用来说主要是通过调用LockSupport.park()和LockSupport.unpark()实现线程的阻塞和唤醒操作的,
当然实现线程间的阻塞和唤醒我们还可以用到对象锁,通过Synchronizer关键字来实现对象同步锁,
使用对象的wait()和notify()方法来实现,但是此方式的实现在性能上会大打折扣而且有些并发控制不当非常容易引发线程间死锁,
可以说非常不优雅。

static Thread t1,t2=null;//内部类调用外部变量
public static void main(String[] args) {
    t1 = new Thread(()->{
        System.out.println("1");
        LockSupport.park();//调用native方法阻塞当前线程
        LockSupport.unpark(t2);//唤醒处于阻塞状态的线程Thrread
    });
    t2 = new Thread(()->{
        System.out.println("1");
        LockSupport.park();
        LockSupport.unpark(t1);
    });

    t1.start();
    t2.start();

}

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值