Ad

Waiting Until A Lock Is Acquired In Another Thread

- 1 answer

I am trying to solve a concurrency problem while getting a lock, the code looks like this:

The real lock is acquired as soon as the thread starts, which is already too late.

acquireLockAndRunOnNewThread(() -> {
    acquiredLock=true;
    continueWithOtherStuff();
}

//do not continue until the lock is acquired
while(acquiredLock==false){
    Thread.sleep(100); 
}
continueWithOtherStuffThatAlsoAcquiresALockAtSomePointInTime()

How can I solve this problem properly without thread.sleep?

Ad

Answer

Use a CountDownLatch:

CountDownLatch latch = new CountDownLatch(1);

Then:

acquireLockAndRunOnNewThread(() -> {
    latch.countDown();
    continueWithOtherStuff();
}

//do not continue until the latch has counted down to zero.
latch.await();
continueWithOtherStuffThatAlsoAcquiresALockAtSomePointInTime()
Ad
source: stackoverflow.com
Ad