java - 当一个对象的使用只在一个地方出现同步块(synchronized block)时会发生什么?

标签 java

Class A {
    private Map<Oject,Object> map;
    public void clear() {
        map.clear();
    }

    public void work() {
        synchronized (map) {
            map.put(new Object, new Object();
        }
    }
}

如果线程 A 在 work() 方法的中间,这是否意味着线程 B 在执行 clear() 方法时不会阻塞?

上面的代码和上面的代码有什么区别?

    public void clear() {
        synchronized (map) {
            map.clear();
        }
    }

最佳答案

您的怀疑是正确的;此代码有错误。

您还需要锁定 clear();否则;您仍然可以同时运行 put()clear()

但是,实际上您应该使用 ConcurrentHashMap()

关于java - 当一个对象的使用只在一个地方出现同步块(synchronized block)时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267526/

相关文章:

java - Spring jpa 异常 - 发现对集合的共享引用

java - 无法获取下载路径

java - Spring jpa - 不能使用多个 EntityManagerFactory

java - 从异常部分重构公共(public)代码

Java - 重定向进程 I/O(管道)正在停滞

java - 在 Android Activity 中保存/重新加载数据,可能使用单独的类

java - java浮点变量初始化

java SwingWorker.doInBackground() 不得访问 GUI 元素

java - HashMap 错误 : incompatible types

java - 让微调器显示他们选择的内容