JDK并发包---(2)重入锁ReentrantLock:中断响应
2017-01-04 15:41
579 查看
import java.util.concurrent.locks.ReentrantLock; /** * interrupted Lock * */ public class IntLock implements Runnable { public static ReentrantLock lock1 = new ReentrantLock(); public static ReentrantLock lock2 = new ReentrantLock(); int lock; /** * 控制加锁顺序,方便构造死锁 * * @param lock */ public IntLock(int lock) { this.lock = lock; } @Override public void run() { try { if (lock == 1) { lock1.lockInterruptibly(); // lock1.lock(); try { Thread.sleep(500); } catch (InterruptedException e) { } lock2.lockInterruptibly(); // lock2.lock(); System.out.println(Thread.currentThread().getId() + ":拿到两个lock,并完成了工作"); } else { lock2.lockInterruptibly(); // lock2.lock(); try { Thread.sleep(500); } catch (InterruptedException e) { } lock1.lockInterruptibly(); // lock1.lock(); System.out.println(Thread.currentThread().getId() + ":拿到两个lock,并完成了工作"); } } catch (InterruptedException e) { e.printStackTrace(); } finally { if (lock1.isHeldByCurrentThread()) { lock1.unlock(); } if (lock2.isHeldByCurrentThread()) { lock2.unlock(); } System.out.println(Thread.currentThread().getId() + ":线程退出"); } } public static void main(String arg[]) throws InterruptedException { IntLock r1 = new IntLock(1); IntLock r2 = new IntLock(2); Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start(); Thread.sleep(1000); // interrupt one thread t1.interrupt(); // t2.interrupt(); } }
相关文章推荐
- JDK并发包---(4)重入锁ReentrantLock:锁申请无限等待且不会产生死锁
- JDK并发包---(5)重入锁ReentrantLock:公平锁
- JDK并发包---(6)重入锁ReentrantLock搭档:Condition条件
- java高并发程序设计总结三:JDK并发包之ReentrantLock重入锁
- JDK并发包---(1)重入锁ReentrantLock:基本使用
- JDK并发包---(3)重入锁ReentrantLock:锁申请等待限时
- 【死磕Java并发】—– J.U.C之重入锁:ReentrantLock
- 【死磕Java并发】—– J.U.C之重入锁:ReentrantLock
- jdk源码解读-并发包-Lock-ReentrantLock(1)--lock()与unlock()方法走读
- 【死磕Java并发】—– J.U.C之重入锁:ReentrantLock
- 【死磕Java并发】—– J.U.C之重入锁:ReentrantLock
- Java并发编程 - ReentrantLock(重入锁)以及公平性
- 【死磕Java并发】—– J.U.C之重入锁:ReentrantLock
- JDK 5.0 Concurrency Utilities 并发处理 ReentrantLock 可重入锁
- 【死磕Java并发】-----J.U.C之重入锁:ReentrantLock
- 【死磕Java并发】—– J.U.C之重入锁:ReentrantLock
- 【Java并发】- ReentrantLock,重入锁
- 【死磕Java并发】—– J.U.C之重入锁:ReentrantLock
- 【死磕Java并发】—– J.U.C之重入锁:ReentrantLock
- jdk源码解读-并发包-Lock-ReentrantReadWriteLock(1)-整体介绍以及读锁的lock 和 unlock 解析