我需要一个简单的锁,并且JavaME超时(并发锁的backport需要完整的Java 1.3)。
如果其他人已经发布了经过测试的JavaME锁定代码,我宁愿使用它。
锁定非常困难,因此我想问一下以下代码是否合理:
公共类TimedLock { 私有volatile线程持有者= null; 私人Vector服务员= new Vector(); 公共无效锁(长毫秒){已 同步(this){ 如果(holder == null){ 持有人= Thread.currentThread(); 返回; } } waiters.addElement(Thread.currentThread()); 尝试{ Thread.sleep(ms); 抛出新的RuntimeException(“等待锁时超时”); } catch(InterruptedException e){ 返回; } } 公共同步的void unlock(){ if(holder!= Thread.currentThread()){ 抛出新的RuntimeException(“试图释放未持有的锁”); } //如果至少有一个服务员,则 在(waiters.size()> 0){ holder =(Thread)waiters.elementAt(waiters.size()-1);的情况下将其唤醒。 waiters.removeElementAt(waiters.size()-1); holder.interrupt(); } else { owner = null; } } }
您正在开发API。不要在公共对象上同步。
如果有人实例化您的TimedLock之一并对其进行同步,则它将停止按您期望的方式工作。
TimedLock需要内部私有对象来实现其同步。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句