¿Por qué usar un ReentrantLock si se puede usar sincronizado(esto)?
Estoy tratando de entender qué hace que el bloqueo en concurrencia sea tan importante si se puede usar synchronized (this)
. En el código ficticio a continuación, puedo hacer cualquiera de los dos:
- sincronizado todo el método o sincronizar el área vulnerable (sincronizado(esto){...})
- O bloquee el área de código vulnerable con un ReentrantLock .
Código:
private final ReentrantLock lock = new ReentrantLock();
private static List<Integer> ints;
public Integer getResult(String name) {
.
.
.
lock.lock();
try {
if (ints.size()==3) {
ints=null;
return -9;
}
for (int x=0; x<ints.size(); x++) {
System.out.println("["+name+"] "+x+"/"+ints.size()+". values >>>>"+ints.get(x));
}
} finally {
lock.unlock();
}
return random;
}
Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32
Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52