锁定JavaME
我需要一个简单的锁,JavaME超时(concurrent.lock的backport需要完整的Java 1.3)。
如果其他人已经为JavaME发布了经过测试的锁定代码,我宁愿使用它。
锁定非常困难,所以我想我会问下面的代码是否理智:
public class TimedLock { private volatile Thread holder = null; private Vector waiters = new Vector(); public void lock(long ms) { synchronized (this) { if (holder == null) { holder = Thread.currentThread(); return; } } waiters.addElement(Thread.currentThread()); try { Thread.sleep(ms); throw new RuntimeException("timeout while waiting for lock"); } catch (InterruptedException e) { return; } } public synchronized void unlock() { if (holder != Thread.currentThread()) { throw new RuntimeException("attempting to release unheld lock"); } // if there is at least one waiter, wake it if (waiters.size() > 0) { holder = (Thread) waiters.elementAt(waiters.size() - 1); waiters.removeElementAt(waiters.size() - 1); holder.interrupt(); } else { holder = null; } } }
您正在开发一个API。 不要在公共对象上同步。
如果有人实例化一个TimedLock并在其上进行同步,那么它将停止按照您期望的方式工作。
TimedLock需要一个内部私有对象来实现它的同步。
链接地址: http://www.djcxy.com/p/92111.html上一篇: Lock for JavaME