|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
[JAVA] Lock and condition
Sono i metodi di sincronizzazione della tiger, chi me li spiega con qualche esempietto
__________________
My gaming placement |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Tra (ReentrantLock,Condition) e (synchronized/wait-notify) la differenza più notevole è quella sintattica: per sincronizzare con java.util.concurrent vedi scrivere molta più roba.
L'altra è strutturale: ReentrantLock e Condition "circolano", nel senso che possono provenire da una parte del sistema diversa da quella che li usa. Gli altri due, synchronized e wait-notify, non passano da una parte all'altra in sè ma possono girovagare insieme all'oggetto che fa da monitor. Ciò che si è fatto con ReentrantLock e Condition è stato semplicemente prendere alcune proprietà di ogni oggetto Java precedentemente espresse attraverso una sintassi ad hoc del linguaggio e travasarle in metodi ad hoc di oggetti ad hoc. Così se prima: Codice:
private final Object MONITOR = new Object();
public void metodo() {
synchronized(MONITOR) {//chiudi
bubbole();
}//apri
}
Codice:
private final Lock MONITOR = new ReentrantLock();
public void metodo() {
try {
MONITOR.lock();//chiudi
bubbole();
} finally {
MONITOR.unlock();//apri
}
}
Codice:
private final Object MONITOR = new Object();
public Resource getResource() {
synchronized(MONITOR) {
try {
while(resources.size() == 0) {
wait();
}
} catch(InterruptedException ex) {
return null;
}
}
}
private void createResource() {
synchronized(MONITOR) {
resources.put(some);
notifyAll();
}
}
Codice:
private final Lock MONITOR = new ReentrantLock();
private Condition storeCondition = MONITOR.newCondition();
public Resource getResource() {
try {
MONITOR.lock();
try {
while(resources.size() == 0) {
storeCondition.await();
}
} catch(InterruptedException ex) {
return null;
}
} finally {
MONITOR.unlock();
}
}
private void createResource() {
try {
MONITOR.lock();
resources.put(some);
storeCondition.signalAll();
} finally {
MONITOR.unlock();
}
}
Niente per cui andare in giro strappandosi i capelli e gridando "oh gesummaria l'ha fatto che bello che bello!" ma, sai, son quelle piccole comodità che uno apprezza. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
supponevo che mi avresti risposto tu
Ok, credo di avere capito, casomai ti chiamo
__________________
My gaming placement |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:07.



















