首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java同步- Mutex.wait vs List.wait

Java同步- Mutex.wait vs List.wait
EN

Stack Overflow用户
提问于 2013-06-06 18:58:33
回答 1查看 3.4K关注 0票数 4

当使用Java线程基元构造线程安全有界队列时,这两个构造之间有什么区别?

  1. 创建显式锁对象。
  2. 使用列表作为锁并等待它。

1示例

代码语言:javascript
运行
复制
private final Object lock = new Object();
private ArrayList<String> list = new ArrayList<String>();

public String dequeue() {
    synchronized (lock) {
        while (list.size() == 0) {
            lock.wait();
        }

        String value = list.remove(0);
        lock.notifyAll();
        return value;
    }
}    

public void enqueue(String value) {
    synchronized (lock) {
        while (list.size() == maxSize) {
            lock.wait();
        }

        list.add(value);
        lock.notifyAll();
    }
}

2实例

代码语言:javascript
运行
复制
private ArrayList<String> list = new ArrayList<String>();

public String dequeue() {
    synchronized (list) {  // lock on list
        while (list.size() == 0) {
           list.wait();     // wait on list
        }

        String value = list.remove(0);
        list.notifyAll();  
        return value;
    }
}


public void enqueue(String value) {
    synchronized (list) {  // lock on list
        while (list.size() == maxSize) {
           list.wait();   // wait on list
        }

        list.add(value);
        list.notifyAll();
    }
}

备注

  1. 这是一个有界的列表
  2. 除了队列和排队列之外,不执行其他操作。
  3. 我可以使用阻塞队列,但这个问题更多的是为了提高我有限的线程知识。
  4. 如果这个问题是重复的,请告诉我。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-06 19:13:44

简单的回答是,不,除了维护额外的锁对象的额外内存开销之外,没有功能上的区别。不过,在做出最后决定之前,我会考虑一些与语义相关的项目。

,我需要在不仅仅是内部列表上执行同步操作吗?

假设您希望为您的ArrayList维护一个并行数据结构,这样列表上的所有操作和并行数据结构都需要同步。在这种情况下,最好使用外部锁,因为对列表或结构的锁定可能会使该类的未来开发工作混淆。

,我是否将访问队列类之外的列表?

假设您希望为您的列表提供一个访问器方法,或者使其对队列类的扩展可见。如果使用外部锁对象,则检索对列表的引用的类将永远无法对该列表执行线程安全操作。在这种情况下,最好在列表上同步,并在API中明确表示,对列表的外部访问/修改也必须在该列表上同步。

我相信有更多的理由可以让你选择一个而不是另一个,但这是我能想到的两大原因。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16970055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档