java中基于CAS的新的同步机制(六)LockSupport——从一道面试题说开去

前言

这篇文章再来介绍一个基于CAS的新的同步机制——LockSupport。

LockSupport可以更方便地控制进程的阻塞与唤醒。

想想之前我们是怎么控制线程的阻塞的?是通过原生Object类里的 wait() 和 notify()。

但是这两个方法的问题在于,调用的先后顺序非常重要,如果对一个线程错误地先调用notify()再调用wait(),这个线程就会无限地等待下去。并且,notify()方法不能指定唤醒某个线程,如果等待队列里的线程不止一个的话,就没法控制唤醒的具体是哪个线程。

但从其他方面来说,LockSupport与wait()/notify()的使用场景是很像的。

我们通过一道面试题来演示一下wait()/notify()以及LockSupport的用法,并且附带了一些代码分析,同时分析了一下这两种方法之间的区别。

通过面试题与wait()/notify()比较

一个线程往容器里加10个元素,另一个线程容器中监视元素的数量。
当容器中元素个数到5的时候,线程2给出提示并结束,线程1继续添加元素。

wait()/notify()解法

public static void main(String[] args) {
   
	List<Integer> list = new ArrayList<>();
	Object lock = new Object();
	
	(new Thread(new Runnable() {
   
	    @Override
	    public void run() {
   
	        synchronized (lock) {
   
	            try {
   
	                lock.wait();
	                System.out.println("容器已经有五个元素了");
	                lock.notify
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值