可重入锁就是可以循环迭代使用的锁,不会产生死锁的现象,典型的就是Synchronized和Reentrantlock。
不可重入锁循环迭代使用则有产生死锁的风险。
// 可重入锁
class ReentrantTest implements Runnable{
public synchronized void get(){
System.out.println(Thread.currentThread().getName() + " get() ");
set();
}
public synchronized void set(){
System.out.println(Thread.currentThread().getName() + " set() ");
}
public void run(){
get();
}
}
// 不可重入锁
class Count{
Lock lock = new Lock();
public void print() throws InterruptedException {
lock.lock();
doSomthing();
lock.unlock();
}
private void doSomthing() throws InterruptedException {
lock.lock();
System.out.println("Hello world!");
lock.unlock();
}
@Test
public void tt() throws InterruptedException {
print();
}
}