java - 为什么有人会在方法中制作本地最终锁定?

标签 java multithreading concurrency java.util.concurrent concurrent-programming

<分区>

我一直在阅读有关 Executors 服务的 Java 源代码。在检查 ThreadPoolExecutor 类时,我发现了这段关闭代码:

public void shutdown() {
    final ReentrantLock mainLock = this.mainLock;
    mainLock.lock();
    try {
        checkShutdownAccess();
        advanceRunState(SHUTDOWN);
        interruptIdleWorkers();
        onShutdown(); // hook for ScheduledThreadPoolExecutor
    } finally {
        mainLock.unlock();
    }
    tryTerminate();
}

而且我不明白这个锁对方法来说是本地的有什么意义。 如果我的理解是正确的,那么每次调用这个函数都会创建新锁,这有点让这个锁变得多余(因为在线程调用中总是传递锁定)并且它在方法范围之外的任何地方都不可见。

这种编码模式在整个类(class)中重复,声明局部最终锁,锁定然后解锁。

编辑:

  • 修复代码误读废话

最佳答案

final 修饰符仅用于方法内部创建的引用。它仍然指的是在类/对象级别创建的实际锁。所以澄清一下,没有为每个方法调用创建新的锁;它使用对象 (this) 中的现有锁。

我假设此类的对象在多个线程之间共享,因此需要这种模式。

关于java - 为什么有人会在方法中制作本地最终锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34153768/

相关文章:

java - JSoup- 按原样获取标签之间的文本

C++11 简单生产者消费者多线程

c - 在 C 中设置线程优先级

java logback 自定义记录器名称

java - 带有 NullPointerException 的列表

C# WPF 机器相关的并发问题

concurrency - 这个webapp代码需要同步吗?

java - 线程并发——使用字符串对象的锁进行同步

Java 确定哪个文本字段具有焦点

c++ - c++中异步线程的实现