相关疑难解决方法(0)

在get()返回null之前,ConcurrentMap.remove()是否提供了一个先发生的边缘?

在看到从另一个线程中删除之后的操作之前,在调用之前的一个线程中的操作是否ConcurrentMap.remove()保证发生

有关放入集合中的对象的文档说明:

在将对象放入任何并发集合之前的线程中的操作发生在从另一个线程中的集合访问或移除该元素之后的操作之前.

示例代码:

{
    final ConcurrentMap map = new ConcurrentHashMap();
    map.put(1, new Object());

    final int[] value = { 0 };

    new Thread(() -> {
        value[0]++;
        value[0]++;
        value[0]++;
        value[0]++;
        value[0]++;

        map.remove(1); // A

    }).start();

    new Thread(() -> {
        if (map.get(1) == null) { // B
            System.out.println(value[0]); // expect 5
        }

    }).start();
}
Run Code Online (Sandbox Code Playgroud)

一个之前发生有关系?因此,如果该程序只打印5?

java concurrency

5
推荐指数
2
解决办法
215
查看次数

标签 统计

concurrency ×1

java ×1