下面就是互相等待对方释放锁的一个实例,程序永远都不会停止
package pri.lsx.test.thread.reentrantlock; import java.util.concurrent.locks.ReentrantLock; /** * 重入锁的使用 * 1:检查new ReentrantLock();是对象锁还是类锁.答:重入锁是对象锁 * 2:构建一个死锁的方式 * * @author lisx * @date 2018-04-30 */ public class ReentrantLockUser { public static void main(String[] args) { // 开始构建一个死锁,互相等待对方释放锁。 Thread threadThree = new Thread(new DeadLockThrad(1), "thread3"); Thread threadFour = new Thread(new DeadLockThrad(99999999), "thread44444444444444444444444444444444444444444"); threadThree.start(); threadFour.start(); } } class DeadLockThrad implements Runnable { static ReentrantLock loclOne = new ReentrantLock(); // 注意这是个静态的,表示锁定范围和类锁的范围一致 static ReentrantLock loclTwo = new ReentrantLock(); // 注意这是个静态的,表示锁定范围和类锁的范围一致 int i; DeadLockThrad(int i) { this.i = i; } @Override public void run() { if (1 == i) { // 先得到一锁再得到二锁 loclOne.lock(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } finally { loclTwo.lock(); loclOne.unlock(); loclTwo.unlock(); } } else { // 先得到二锁再得到一锁 loclTwo.lock(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } finally { loclOne.lock(); loclTwo.unlock(); loclOne.unlock(); } } } }