gpt4 book ai didi

java - JavaME 锁

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:52 25 4
gpt4 key购买 nike

我需要一个简单的锁,JavaME 超时(concurrent.lock 的反向移植需要完整的 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。不要在公共(public)对象上同步。

如果有人实例化您的 TimedLock 之一并在其上同步,那么它将停止按您期望的方式工作。

TimedLock 需要一个内部私有(private)对象来实现同步。

关于java - JavaME 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9616667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com