锁定JavaME

褪色的蜜蜂

我需要一个简单的锁,并且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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章