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定时器类