实现死锁的两种方式以及ReentrantLock的额外功能(未完待续)
思路: 死锁是指在多线程环境下的这么一种场景,两个(多个)线程在分别拿到自己的锁时尝试获取对方的锁,由于必须等待对方释放锁才能获取,然而双方谁也不肯先释放自己的锁, 导致双方谁都无法继续执行。 通过一个实现runnable接口的类实例作为两个线程的执行对象,在该类中有两个Object的静态变量作为锁.通过该类的一个开关变量实现在同一个run方法中执行两段不同的逻辑,一个先获取锁1, 再获取锁2,另一个分支则刚好相反。 为了使第一个执行的线程在拿到第二个锁之前失去cpu执行权,方便构造死锁场景,在尝试获取第二个锁之前,让线程休眠一段时间,因为sleep()方法不会释放锁。 实现死锁的方法有两种,一种是使用synchronized同步代码块,另一种是使用reentrantlock重入锁。 使用同步代码块实现死锁 代码 public class TestDeadLock implements Runnable { //开关 private boolean flag; //锁1 private static Object lock1 = new Object(); //锁2 private static Object lock2 = new Object(); public TestDeadLock(boolean flag) { this.flag = flag; } @Override