JavaSE8基础 死锁之同步嵌套 简单示例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE8基础 死锁之同步嵌套 简单示例相关的知识,希望对你有一定的参考价值。
礼悟:
好好学习多思考,尊师重道存感恩。叶见寻根三返一,活水清源藏于零。
虚怀若谷良心主,皓月当空自在王。愿给最苦行无悔,诚劝且行且珍惜。
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视频库。如果您有公开的资源,可以分享给我的话,用您的资源学习也可以。
博文是观看视频后,融入思考写成的。博文好,是老师讲得好。博文坏,是 给最苦 没认真。
以上是关于JavaSE8基础 死锁之同步嵌套 简单示例的主要内容,如果未能解决你的问题,请参考以下文章