My ReentrantLock is not working as my expectiation. I expected the result of below code to have two threads locked and unlocked randomly but I got the result was always unlock on one thread. Can anyone explain ReentrantLock and I am trying to understand the fairness policy of it (i.e. new ReentrantLock(true)) and also tryLock() method. Thanks.
final ReentrantLock lock = new ReentrantLock(true);
new Thread(new Runnable() {
@Override
public void run() {
while (true)
try{
if (lock.tryLock(1, TimeUnit.SECONDS)) {
lock.lock();
System.out.println(Thread.currentThread().getName() + " locked");
lock.unlock();
} else {
System.out.println(Thread.currentThread().getName() + " not locked");
}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true)
try{
if (lock.tryLock(1, TimeUnit.SECONDS)) {
lock.lock();
System.out.println(Thread.currentThread().getName() + " locked");
lock.unlock();
} else {
System.out.println(Thread.currentThread().getName() + " not locked");
}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
Results in console:
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked
Thread-1 not locked
Thread-0 locked