|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.zkoss.util.WaitLock
public class WaitLock
A simple lock used to implement load-on-demand mechanism.
Typical use: a thread, say A, checks whether a resource is loaded, and
put a WaitLock instance if not loaded yet. Then, another thread, say B,
if find WaitLock, it simply calls waitUntilUnlock(int)
to wait.
Meanwhile, once A completes the loading, it put back the resource
and calls unlock()
.
WaitLock lock = null;
for (;;) {
synchronized (map) {
Object o = map.get(key);
if (o == null) {
map.put(key, lock = new WaitLock());
break; //go to load resource
}
}
if (o instanceof MyResource)
return (MyResource)o;
if (!((Lock)o).waitUntilUnlock(60000))
log.waring("Takes too long");
}
//load resource
try {
....
synchronized (map) {
map.put(key, resource);
}
return resource;
} catch (Throwable ex) {
synchronized (map) {
map.remove(key);
}
throw SystemException.Aide.wrap(ex);
} finally {
lock.unlock();
}
Constructor Summary | |
---|---|
WaitLock()
Once created, it is default to be locked. |
Method Summary | |
---|---|
void |
unlock()
Unlocks any other threads blocked by waitUntilUnlock(int) . |
boolean |
waitUntilUnlock(int timeout)
Waits this lock to unlock. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public WaitLock()
waitUntilUnlock(int)
won't return until unlock()
is called.
Method Detail |
---|
public boolean waitUntilUnlock(int timeout)
SystemException
- if this thread is interrupted
PotentialDeadLockException
- if the thread itself creates
this lock. In other words, it tried to wait for itself to complete.public void unlock()
waitUntilUnlock(int)
.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |