2susanin за ReentrantReadWriteLock спасибо, вроде то что надо! ) Правда код из примера немного смущает....
| Код | class RWDictionary { private final Map<String, Data> m = new TreeMap<String, Data>(); private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); private final Lock r = rwl.readLock(); private final Lock w = rwl.writeLock();
public Data get(String key) { r.lock(); try { return m.get(key); } finally { r.unlock(); } } public String[] allKeys() { r.lock(); try { return m.keySet().toArray(); } finally { r.unlock(); } } public Data put(String key, Data value) { w.lock(); try { return m.put(key, value); } finally { w.unlock(); } } public void clear() { w.lock(); try { m.clear(); } finally { w.unlock(); } } } |
Везде try и catch, разве это не херит производительность на корню? Вроде я даже читал где то, что try и catch следует стараться избегать и юзать предварительные проверки везде где возможно...
2Maniak
| Цитата | while (isLocked) { wait(500); } |
такой способ подходит разве что для проектирования п/о к дверце http://filesupload.narod.ru/dachia/PICT0172.JPG |