admin 发表于 2018-8-23 20:39:52

重入锁:ReentrantLock 详解

import java.util.concurrent.locks.ReentrantLock;public class KillDeadlock implements Runnable{    public static ReentrantLock lock1 = new ReentrantLock();    public static ReentrantLock lock2 = new ReentrantLock();    int lock;    public KillDeadlock(int lock) {      this.lock = lock;    }    @Override    public void run() {      try {            if (lock == 1) {                lock1.lockInterruptibly();// 以可以响应中断的方式加锁                try {                  Thread.sleep(500);                } catch (InterruptedException e) {}                lock2.lockInterruptibly();            } else {                lock2.lockInterruptibly();// 以可以响应中断的方式加锁                try {                  Thread.sleep(500);                } catch (InterruptedException e) {}                lock1.lockInterruptibly();            }      } catch (InterruptedException e) {            e.printStackTrace();      } finally {            if (lock1.isHeldByCurrentThread()) lock1.unlock();// 注意判断方式            if (lock2.isHeldByCurrentThread()) lock2.unlock();            System.err.println(Thread.currentThread().getId() + "退出!");      }    }    public static void main(String[] args) throws InterruptedException {      KillDeadlock deadLock1 = new KillDeadlock(1);      KillDeadlock deadLock2 = new KillDeadlock(2);      Thread t1 = new Thread(deadLock1);      Thread t2 = new Thread(deadLock2);      t1.start();t2.start();      Thread.sleep(1000);      t2.interrupt(); // ③    }}


来自:https://blog.csdn.net/Somhu/article/details/78874634
页: [1]
查看完整版本: 重入锁:ReentrantLock 详解