Book01-No.1 单例多线程执行模式
1、多线程死锁
a. 死锁分析:
? ?假设A和B同时在吃意大利面,而吃意大利面的条件是左手使用汤勺,右手使用叉子。现在只有一副餐具,A拿到了汤勺,B拿到了叉子,A等待B放下叉子,B等待A放下汤勺。则形成了死锁。
b. 出现死锁的条件:
具有多个SharedResource参与者,相当于汤勺和叉子。线程锁定了一个SharedResource之后,在未解锁的情况下去锁定另一个SharedResource参与者,相当于A在拥有了汤勺之后,又去拿叉子;B在拥有了叉子之后又去拿汤勺。获取SharedResource参与者的顺序不固定,参与者顺序对等,相当于汤勺和叉子的顺序相同,没有先后关系。c. 上述1、2、3三个条件只要破坏了其中一种,则就解决了死锁的问题。
2、提高多线程执行性能的两种方式:
减少 SharedResource参与者参与者的个数,从而减少synchronized使用数量,减少获取对象锁的操作时间
尽量缩短临界区范围,从而减少线程冲突时等待的时间。
3、自己设计线程锁
?/**