标签:学习 generated 解锁 highlight 珍惜 开始 子类 auth start
礼悟:
好好学习多思考,尊师重道存感恩。叶见寻根三返一,活水清源藏于零。
虚怀若谷良心主,皓月当空自在王。愿给最苦行无悔,诚劝且行且珍惜。
os :windows7 x64
jdk:jdk-8u131-windows-x64
ide:Eclipse Oxygen Release (4.7.0)
继承Thread的子类:
package blog.jizuiku1;
/*
* @author jizuiku
* @version V17.09.27
*/
public class DieLock extends Thread {
// 因为是 用同步嵌套演示死锁,所以 需要创建两把锁
private static Object lockA = new Object();
private static Object lockB = new Object();
// 创建一个标记,它和if-else配套使用会有很巧妙的效果
private boolean flag;
public DieLock(boolean flag) {
super();
this.flag = flag;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
// 如果一个线程的flag是true,它抢到执行权后,会将lockA锁上
// 同时,另一个线程的flag是false,它抢到执行权后,会将lockB锁上
// 于是,第一个线程只有在lockB解锁的情况下才能往下走
// 可尴尬的是,第二个线程只有在lockA解锁的情况下才能往下走
// 于是,这两个线程就开始漫长的等待......
// 得不到的就放下吧.........执着下去的话,一生就过去了.
if (flag) {
synchronized (lockA) {
// 线程要想到这里来,则需要lockA是解开的
// 当线程到这里来之后,lockA就被锁上了
System.out.println("flag=true,lockA");
synchronized (lockB) {
System.out.println("flag=true,lockB");
}
}
} else {
synchronized (lockB) {
// 线程要想到这里来,则需要lockB是解开的
// 当线程到这里来之后,lockB就被锁上了
System.out.println("flag=flase,lockB");
synchronized (lockA) {
System.out.println("flag=flase,lockA");
}
}
}
}
}
}
测试类:
package blog.jizuiku1;
/*
* @author jizuiku
* @version V17.09.27
*/
public class DieLockDemo {
public static void main(String[] args) {
DieLock dl1 = new DieLock(true);
DieLock dl2 = new DieLock(false);
dl1.start();
dl2.start();
}
}
结果: 
感想:
看了这一幕,给最苦 不由得想到了 两仪图

Java优秀,值得学习。
学习资源:itcast和itheima视频库。如果您有公开的资源,可以分享给我的话,用您的资源学习也可以。
博文是观看视频后,融入思考写成的。博文好,是老师讲得好。博文坏,是 给最苦 没认真。
标签:学习 generated 解锁 highlight 珍惜 开始 子类 auth start
原文地址:http://www.cnblogs.com/jizuiku/p/7638678.html