使用Java和x27之间的权衡;s内置的并发机制与java.util.concurrent中提供的实用程序

使用Java和x27之间的权衡;s内置的并发机制与java.util.concurrent中提供的实用程序,java,concurrency,Java,Concurrency,使用Java内置的Concurrency机制与Java.util.concurrent中提供的实用程序(例如ReentrantLocks)之间的权衡是什么 “synchronized”特性是一种语言构造,具有用于输入和退出块的特殊流控制,而“util.concurrent”必须遵守任何其他对象的规则。这将给程序员带来一些认知负荷 “util.concurrent”接口和实现可以定义自己独特的行为(如公平性或单独的读/写锁),因此在特定情况下有改进性能的空间 “util.concurrent.at

使用Java内置的Concurrency机制与Java.util.concurrent中提供的实用程序(例如ReentrantLocks)之间的权衡是什么

  • “synchronized”特性是一种语言构造,具有用于输入和退出块的特殊流控制,而“util.concurrent”必须遵守任何其他对象的规则。这将给程序员带来一些认知负荷

  • “util.concurrent”接口和实现可以定义自己独特的行为(如公平性或单独的读/写锁),因此在特定情况下有改进性能的空间

  • “util.concurrent.atomic”类可以为指令提供硬件级别的支持,这些指令支持无锁和无等待算法,这些算法在某些应用程序中可以具有更好的性能


  • 没有权衡,只有陷阱

    几乎没有人使用wait()、notify()和notifyAll()来实现并发控制,除非他们正在编写java.util.concurrent中不可用的构造。即使是Doug Lea(Java并发编程和JSR-166规范lead的作者)也很难做到这一点


    Synchronized适用于简单的情况,但没有提供所需的粒度(Synchronized单独不支持多读写器锁,尽管您可以使用它来实现信号量,然后实现RW锁,但您将重新发明轮子)。

    Synchronized的优点:

    • 显然,从语法方面来说,使用简单的
      synchronized
      块(或方法)更容易,而且您不能忘记
      unlock()
      步骤
    锁的优点

    • 另一方面,使用显式的
      Lock
      对象,您可以拥有非嵌套的受保护块-例如,当在链表上迭代时,您可能总是希望锁定下一个列表元素,并且仅在此之后解锁上一个列表元素

    • 锁对象允许阻塞不可中断、阻塞可中断和非阻塞获取锁,而同步块只允许阻塞不可中断的锁

    • 还有其他锁实现允许不同的锁策略(如ReadWriteLock)


    • 有两个主要区别:

      • java.util.concurrent
        类表示特定概念的更高抽象级别和经过测试的实现。您可以只使用同步来实现这些概念中的大部分或全部,但这将需要更多的代码、更多的工作,并且更容易出错
      • 其中一些类基于原子硬件操作(比较和设置),而不是同步化,同步化在严重(但不是极端)争用下的性能优于同步化

      你能给我们举几个你想使用的实用程序的例子吗?@svirst信号量、倒计时锁……我对你所说的理解正确吗:使用java内置的同步机制只有陷阱?这是正确的吗?除了最简单的用例(单读器或单写器)外,您最好考虑您要完成的任务和使用java.util.concurrent