java.util.concurrent.ThreadPoolExecutor 奇怪的逻辑

标签 java multithreading

看看 ThreadPoolExcecutor 的这个方法:

public void execute(Runnable command) {
    ...
        if (runState == RUNNING && workQueue.offer(command)) {
            if (runState != RUNNING || poolSize == 0)
                ensureQueuedTaskHandled(command);
        }
    ...
}

它检查 runState 是否为 RUNNING 然后相反。当我尝试对类似 SEDA 的模型进行一些调整时,我想了解线程池的内部结构。
你认为这段代码正确吗?

最佳答案

执行器的运行状态可能会在初始检查和后续检查之间发生变化在命令添加到队列后。原因之一是调用了执行程序的 shutdown() 方法。

执行第二次检查,以便如果执行程序已关闭,则任何排队的任务都会得到适当处理,而不是被困在队列中。

关于java.util.concurrent.ThreadPoolExecutor 奇怪的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500966/

相关文章:

java - 如何使用 apache POI for word 在文本上添加删除线

java - 包含 Xpath 中的函数

c++ - 这个接口(interface)是线程安全的吗?

c# - C# 中的并行事件处理

multithreading - 原子比较交换。这是对的吗?

java - 如何在 Java 中使用 XPath 解析带有内部引用的 SOAP 响应

java - Java 泛型中的重写

java - 如何导入中间件库

multithreading - Scala并行集合: How to know and configure the number of threads

multithreading - 类似于线程安全映射的对仅在一个线程上存在的值的访问