Java线程死锁 - 极悦
Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java线程死锁

package com.wkcto.chapter07.sync.p6;

public class SubThread extends Thread {
	@Override
	public void run() {
		if ("a".equals(Thread.currentThread().getName())) {
			synchronized ("资源1") {
				System.out.println("线程a获得了资源1, 还想获得资源2");
				synchronized ("资源2") {
					System.out.println("线程a同时获得了资源1与资源2,可以做爱做的事了");
				}
			}
		}
		if ("b".equals(Thread.currentThread().getName())) {
			synchronized ("资源2") {
				System.out.println("线程b获得了资源2, 还想获得资源1");
				synchronized ("资源1") {
					System.out.println("线程b同时获得了资源1与资源2,可以做爱做的事了");
				}
			}
		}
		
	}
}
package com.wkcto.chapter07.sync.p6;
/**
 * 死锁
 * 		在线程同步时, 由于线程获得锁的顺序不一致,导致了线程出现相互等待的情况
 * 如何避免死锁?
 * 		线程如果想要获得多个锁对象, 保证获得锁对象的顺序一致 
 * @author 蛙课网
 *
 */
public class Test {

	public static void main(String[] args) {
		SubThread ta = new SubThread();
		ta.setName("a");
		ta.start();
		
		SubThread tb = new SubThread();
		tb.setName("b");
		tb.start();
	}

}

总结:

理解线程的相关概念

掌握创建线程的方式

理解线程的生命周期

掌握线程的常用方法

start()

Thread.currentThread

getName()    /  setName()

Thread.sleep()
理解为什么要进行线程同步?  掌握如何进行同步??

理解线程同步必须使用同一个锁对象, 常用的锁对象: 常量 , this,  当前类的运行时类

理解同步方法,

努力掌握生产者消费者设计模式

掌握Timer定时器类

全部教程