Очень простой пример, просто чтобы понять CountDownLatch без каких-либо
дополнительный код.
A java.util.concurrent.CountDownLatch
- это конструкция параллелизма, которая позволяет одному или нескольким потокам ожидать завершения определенного набора операций.
A CountDownLatch
инициализируется с заданным количеством. Это число уменьшается при вызове метода countDown()
. Потоки, ожидающие, пока это число достигнет нуля, могут вызывать один из методов await()
. Вызов await()
блокирует поток, пока счетчик не достигнет нуля.
Ниже приведен простой пример. После того, как Декремент звонит countDown()
3 раза на CountDownLatch
, ожидающий Официант освобождается от вызова await()
.
Вы также можете упомянуть некоторые TimeOut
, чтобы ждать.
CountDownLatch latch = new CountDownLatch(3);
Waiter waiter = new Waiter(latch);
Decrementer decrementer = new Decrementer(latch);
new Thread(waiter) .start();
new Thread(decrementer).start();
Thread.sleep(4000);
public class Waiter implements Runnable{
CountDownLatch latch = null;
public Waiter(CountDownLatch latch) {
this.latch = latch;
}
public void run() {
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Waiter Released");
}
}
// --------------
public class Decrementer implements Runnable {
CountDownLatch latch = null;
public Decrementer(CountDownLatch latch) {
this.latch = latch;
}
public void run() {
try {
Thread.sleep(1000);
this.latch.countDown();
Thread.sleep(1000);
this.latch.countDown();
Thread.sleep(1000);
this.latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Ссылка
Если вы не хотите использовать CountDownLatch
или вам требуется что-то такое же, как в Facebook, в отличие от функциональности. Означает, что при вызове одного метода другой метод не вызывается.
В этом случае вы можете объявить
private volatile Boolean isInprocessOfLikeOrUnLike = false;
и затем вы можете проверить в начале вашего вызова метода, что если это false
, то вызов метода в противном случае возвращает .. зависит от вашей реализации.