学习笔记(18):Java面试Offer直通车-你用过哪些线程并发类?基础篇

立即学习:https://edu.csdn.net/course/play/27126/355518?utm_source=blogtoedu

通过wait、notify管理并发

  1. 这两个方法需要放在synchronized的作用域里
  2. 一旦执行wait方法,会释放synchronized所关联的锁,进入阻塞状态,无法再次主动地到可执行状态
  3. 一旦执行notify方法,会通知因调用wait方法而等待锁的线程,如有多个线程等待,则会任意挑选一个线程来唤醒
  4. notifyAll会唤醒因wait而进入到阻塞状态的线程,但他们没得到锁,因此会竞争锁,得到锁的继续执行,在它释放锁后,其他线程会继续竞争,以此类推。

以生产者消费者问题观察wait和notify

  1. 当仓库满,wait生产者线程,notify消费者线程
  2. 当仓库空,notify生产者线程,wait消费者线程
  3. 一旦执行wait方法,会释放synchronized所关联的锁,进入阻塞状态,无法再次主动地到可执行状态

通过Condition实现线程间的通讯

  1. 当线程A调用Condition的await方法后,会释放相应的对象锁,并且让自己进入阻塞状态,等待被其它的线程唤醒
  2. 线程B得到锁资源后,开始执行业务,完成后,能调用Condition的signal方法,唤醒线程A,让线程A恢复执行
  3. 基于Object类的wait,notify和notifyAll方法只能建立一个阻塞队列
  4. 通过Condition类,可以在不同的线程里创建多个阻塞队列

通过Semaphore管理多线程的竞争

  1. 多个线程需要竞争数量相对少的资源,比如100个线程需要连接到同一个数据库上,但任何时刻,数据库最多只能提供10个连接
  2. semaphore类是个计数信号量
  3. 构造函数,public Semaphore (int permits,boolean fair) permits 参数表示初始化可用的资源数目,而fair表示是否公平锁,
  4. 用acquire方法申请资源,用release方法释放资源。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值