重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。
package concurrent; import org.junit.Test; import java.util.concurrent.locks.ReentrantLock; /** * Desc: * Creator: pengweixiang * Date: 2019-04-21 */ public class ReentrantLockTest { //重入锁,提供无参的构造函数,默认是非公平锁。还有个有参的构造函数,选择是否公平 private ReentrantLock lock = new ReentrantLock(false); @Test public void test() { System.out.println("ReentrantLockTest start ..."); if (lock.tryLock()) { try { MyTask task = new MyTask("MyTask"); //task.setDaemon(true); task.start(); } finally { lock.unlock(); } } TimeUtils.sleep(5); } private class MyTask extends Thread { public MyTask(String name) { super(name); } @Override public void run() { System.out.println("Task running. Thread name: " + Thread.currentThread().getName()); TimeUtils.sleep(1); //该线程再次获取锁 if (lock.tryLock()) { try { System.out.println("Reentrant lock ......"); } finally { lock.unlock(); } } } } }