本文主要是介绍第十四章 多线程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语句
}
将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()暂定、切线程
这篇关于第十四章 多线程2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!