putIfAbsent se puede utilizar de forma flexible
El mismo usuario solo puede acceder al mismo método una vez y solo después de que el método haya terminado de ejecutarse.
Pero si hay varias máquinas, este método no es adecuado. Se deben utilizar bloqueos distribuidos, como zookeeper.
La clase de prueba es la siguiente:
importar java.util.concurrent.ConcurrentHashMap;
importar java.util.concurrent.CountDownLatch;
/**
* Creado por cailu el 6/6/2018.
*/
prueba de clase pública{
caché ConcurrentHashMap final estática pública = new ConcurrentHashMap();
principal vacía estática pública ( String[] args) lanza InterruptedException {
CountDownLatch start = new CountDownLatch(1);
CountDownLatch stop = new CountDownLatch(10);
for (int i = 0; i < 10; i++) {
RunThread runThread = new RunThread(RandomStringUtils.random(1, "ABC"), iniciar, detener);
Hilo de rosca = nuevo hilo(runThread);
thread.start();
}
start.countDown();
stop.await ();
System.out.printn("Todo en ejecución");