cosas Antes de Java 5, habría escrito así:
// pre Java 5 code:
Object lock = new Object();
// ...
synchronized(lock) {
// do something that requires synchronized access
}
Pero desde Java 5, usaría clases de java.util.concurrent.locks
(personalmente, no encuentro esto más complicado o error -prone):
// Java 5 Code Using Locks
Lock lock = // ...
lock.lock();
try {
// do something that requires synchronized access
}
finally {
lock.unlock();
}
Si necesita lectura-escritura de bloqueo, aquí está implementado ejemplo el uso de bloqueos de lectura y escritura de 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();
}
}
Por supuesto, adáptelo a sus necesidades.
Ponerlos en una nueva clase puede ayudar a aclarar lo que quiere hacer, por lo que lo recomendaría. Sin embargo, eso no afecta la seguridad del hilo en absoluto. Me gusta la respuesta que usa bloqueos explícitos (a continuación). –