cose Prima di Java 5, avrei scritto così:
// pre Java 5 code:
Object lock = new Object();
// ...
synchronized(lock) {
// do something that requires synchronized access
}
Ma dal momento che Java 5, mi piacerebbe utilizzare le classi da java.util.concurrent.locks
(personalmente, non trovo questo più complicato o un errore -prone):
// Java 5 Code Using Locks
Lock lock = // ...
lock.lock();
try {
// do something that requires synchronized access
}
finally {
lock.unlock();
}
Se avete bisogno di lettura-scrittura di chiusura, ecco ad esempio implementato utilizzando blocchi di lettura e scrittura da Java 5:
private ReadWriteLock rwl = new ReentrantReadWriteLock();
private Lock rLock = rwl.readLock();
private Lock wLock = rwl.writeLock();
private List<String> data = new ArrayList<String>();
public String getData(int index) {
rLock.lock();
try {
return data.get(index);
} finally {
rLock.unlock();
}
}
public void addData(int index, String element) {
wLock.lock();
try {
data.add(index, element);
} finally {
wLock.unlock();
}
}
Naturalmente, adattarlo alle proprie esigenze.
fonte
2009-12-05 13:36:48
Inserirli in una nuova classe può aiutare a chiarire cosa si vuole fare, quindi lo consiglierei. Tuttavia, ciò non influisce affatto sulla sicurezza del thread. Mi piace la risposta che utilizza i blocchi espliciti (sotto). –