3-4-Java多线程-案例-死锁
2016-11-20 22:29
405 查看
死锁
同步的另一个弊端:情况之一:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。
这时容易引发一种现象:死锁。
这种情况能避免就避免掉。
//Thread-0 synchronized(obj1) { -->thread-0 obj1 synchronized(obj2) { } } //Thread-1 synchronized(obj2) { Thread-1 obj2 synchronized(obj1) { } }
死锁示例
class Test implements Runnable { private boolean flag; Test(boolean flag) { this.flag = flag; } public void run() { if(flag) { while(true) { synchronized(MyLock.LOCKA) { System.out.println(Thread.currentThread().getName()+"...if......locka"); synchronized(MyLock.LOCKB) { System.out.println(Thread.currentThread().getName()+"...if......lockb"); } } } } else { while(true) { synchronized(MyLock.LOCKB) { System.out.println(Thread.currentThread().getName()+"...else......lockb"); synchronized(MyLock.LOCKA) { System.out.println(Thread.currentThread().getName()+"...else......locka"); } } } } } } //定义一个用于存储锁对象类。 class MyLock { public static final Object LOCKA = new Object(); public static final Object LOCKB = new Object(); } class DeadLockTest { public static void main(String[] args) { //创建两个线程任务。 Test t1 = new Test(true); Test t2 = new Test(false); Thread t11 = new Thread(t1); Thread t22 = new Thread(t2); t11.start(); t22.start(); } }
执行结果
Thread-0if ... lock a Thread-1else ... lock b
相关文章推荐
- JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池
- java线程基础巩固---多线程死锁分析,案例介绍
- JAVA多线程-生产者与消费者当线程多时发生死锁的解决方法
- java多线程-线程池-synchronized-死锁
- Java基础_线程_多线程_死锁
- java多线程 模拟死锁程序
- JAVA 多线程死锁问题及解决
- [java]一个多线程引起的死锁(class初始化,锁)
- java多线程之死锁
- java 多线程:死锁
- Java基础之多线程(一)--概述、同步、死锁、单例模式
- java多线程之死锁
- Java多线程之同步与死锁
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- java学习日记(6)____多线程的安全问题与死锁的产生
- JAVA多线程单例模式及死锁
- 简析 java多线程中的死锁与生命性
- java多线程:死锁
- 学习笔记 java多线程 信号量(Semaphore),死锁
- 简单多线程死锁案例