多线程同步之LockSupport

多线程同步的方式有很多种,synchronized,wait/notify,lock/condition等,这里介绍一下 LockSupport。

对于传统的wait/notify这种比较low的做法,1,要自己维护一套锁对象;2,必须在同步代码块中使用,3,无法控制两者之间执行顺序导致有时候会形成阻塞情况,4,开销比较大。

先来一个LockSupport的Demo吧:

Locksupport

相比于wait/notify的方式要简单很多(这种方式的代码就不展示了),而且不管执行多少次都不会出现阻塞的情况。

LockSupport优势:

  • ①LockSupport不需要在同步代码块里 。所以线程间也不需要维护一个共享的同步对象了,实现了线程间的解耦。

  • ②unpark函数可以先于park调用,所以不需要担心线程间的执行的先后顺序。

接下来看一个题:

题目:
 * 已知数组 A 内容为1、2、3、4...52,数组 B 内容为 26 个英文字
 * 母,使用两个线程分别输入两个数组,然后使程序运行打印内容为 
 * 12a34b56c78e... 的规律,请给出代码实现?

最传统的做法就是使用wait/notify了,但是也是最low的,介绍两个比较有优势的方式。

方案一:自旋锁 yield

定义两个实现Thread的类,一个负责打印数字,一个负责打印字符

PrintNumbers:

PrintNUmbers

PrintChars:
PrintChars

测试:
测试

方案二:LockSupport

PrintNumbers:
PrintNumbers

PrintChars
PrintChars

测试:
测试

多线程同步问题是比较复杂的问题,多了解一些方式总是好的,这里就小酌一杯。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值