package jdk_concurrent;import java.util.concurrent.locks.ReentrantLock;public class Inlock implements Runnable {public static ReentrantLock lock1 = new ReentrantLock();public static ReentrantLock lock2 = new ReentrantLock();int lock;// 控制加锁顺序,方便构造死锁public Inlock(int lock) {super();this.lock = lock;}public static void main(String[] args) throws InterruptedException {Inlock r1 = new Inlock(1);Inlock r2 = new Inlock(2);Thread t1 = new Thread(r1);Thread t2 = new Thread(r2);t1.start();t2.start();Thread.sleep(1000);// 中断一个线程,放弃任务直接退出释放资源t2.interrupt();}@Overridepublic void run() {try {if (lock == 1) {// lockInterruptibly()可以对中断响应的锁申请动作,即在等待锁的过程中可以响应中断lock1.lockInterruptibly();Thread.sleep(500);lock2.lockInterruptibly();} else {lock2.lockInterruptibly();Thread.sleep(500);lock1.lockInterruptibly();}} catch (Exception e) {e.printStackTrace();} finally {// 查询当前线程是否保持此锁if (lock1.isHeldByCurrentThread()) {lock1.unlock();}if (lock2.isHeldByCurrentThread()) {lock2.unlock();}System.out.println(Thread.currentThread().getId() + ":线程退出");}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。