第十四章 多线程2

14.1 线程间通信

多个线程处理同一资源,但任务不同。


14.2 等待唤醒机制

wait(), notify(), notifyAll()

这些监视器方法定义在Object类中。使用时必须定义在同步中,且应明确操作于哪个锁上的线程。


14.3 多生产者多消费者问题

while多次循环 判断标志,以选择继续运行或者wait().

notifyAll唤醒,避免while中wait引发的死锁。


14.4 Lock接口

提供了比synchronized方法或语句更广泛与灵活的锁定操作。

Lock lock = new xxxLock();
function {
lock.lock();
//code...
lock.unlock(); //若有可能抛出异常,unlock放到finally语句
}


14.5 condition接口

将Object的wait(),notify(),notifyAll(),分解成不同的对象,以便将这些对象与Lock组合使用

await(), signal(), signalAll();

condition c1 = lock.newCondition();
condition c2 = lock.newCondition();


14.6 wait和sleep的区别
1)wait可以不指定时间;sleep必须指定时间。
2)在同步中:wait释放执行权,释放锁;sleep释放执行权,不释放锁。

14.7 停止线程的方式
1)run()结束
2)stop()将释放其锁定的所有监视器,可能使受这些监视器保护的对象处于不一致的状态。

如何控制线程任务的结束:
任务中都有循环结构,通过控制循环控制线程结束。
while(flag) 定义标记。

如果线程处于冻结状态,将无法读取标记判断,则使用interrupt()将线程从冻结状态中恢复到1运行状态,并抛出interruptedException

14.8 线程的其他方法
1)setDaemon() 将线程标记为守护线程或用户线程
2)join() 该线程申请加入运行,并等待该线程终止
3)setPriority()优先级1-10,三个常量MAX_PRIORITY,MIN_PRIORITY,NORM_PRIORITY
4) yield()暂定、切线程





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值