Java多线程技术初识——5. 死锁
来源:互联网 发布:日本买房知乎 编辑:程序博客网 时间:2024/05/19 15:41
死锁:
指多个进程or 线程在运行过程中因争夺资源而造成的一种僵局,当线程 处于 这种僵态是,若无外力作用,他们将无法再向前推进。
最常见的死锁情况,同步的嵌套:
同步中还有同步,两个同步用的不是一个锁。
我们应当,尽量避免同步嵌套的情况。
如下所示:
public class Clock {public static Clock locka = new Clock();public static Clock lockb = new Clock();}public class DeadLock implements Runnable {private boolean flag;public DeadLock(boolean flag){this.flag = flag;}@Overridepublic void run() {if(flag){while(true){synchronized(Clock.locka){System.out.println(".................if locka");synchronized(Clock.lockb){System.out.println(".................if lockb");}}}}else{while(true){synchronized(Clock.lockb){System.out.println("-------------------------else lockb");synchronized(Clock.locka){System.out.println("----------------------else locka");}}}}}}public class DeadLockTest {public static void main(String[] args) {DeadLock d1 = new DeadLock(true);DeadLock d2 = new DeadLock(false);Thread t1 = new Thread(d1);Thread t2 = new Thread(d2);t1.start();t2.start();}}
上例中,当先线程1 拿到 Clock.locka , 线程2 拿到 Clock.lockb, 但 此时,线程1 需要 Clock.lockb 来继续运行,线程2 需要 Clock.locka 来继续运行,他们互不想让,就造成了死锁的状况。
- Java多线程技术初识——5. 死锁
- Java多线程技术初识——1. 概述
- Java多线程技术初识——2. 线程的创建
- Java多线程技术初识——3. 线程安全问题
- Java多线程——死锁
- 初识Java——多线程
- Java多线程技术初识——6. 单例模式在多线程中应用
- Java多线程技术初识——4. 多线程安全问题的解决
- Java多线程技术初识——4. 多线程安全问题的解决
- java多线程学习——初识多线程
- Java多线程(八)——死锁
- JAVA多线程——死锁分析
- Java多线程初探——死锁
- Java多线程(6)——死锁
- Java多线程㈢—死锁(示例)
- Java多线程技术初识——7. 线程的生命周期,优先级,调度
- Java多线程技术初识——8 ,等待唤醒机制(一)
- Java多线程技术初识——9,等待唤醒机制(二)
- android内存优化
- 用一个随机函数表示出更大范围的随机函数
- openldap学习笔记
- 分享一个很久以前做的G.726编码语音传输代码
- 一个较好的C++冒泡排序
- Java多线程技术初识——5. 死锁
- 官网瀑布流实现分享thinkphp
- XML笔记
- ubuntu (LAMP)
- 又是一届校赛进行时
- SSDP
- 数据库分页查询语句
- spring mvc ioc getCurrentSession出错: HibernateException: No Session found
- 【Directx3D游戏开发】——网格模型(mesh .x)