gpt4 book ai didi

java - Java 中各种线程同步选项之间有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 20:14:46 24 4
gpt4 key购买 nike

谁能解释一下 Java 中各种同步方法之间的各种区别?

  • 同步块(synchronized block)(如监视器?)
  • 锁 - Java 并发 lock.lock()/lock.unlock()
  • 信号量..?
  • Object.wait() & Object.notify()(像 Mutex?)
  • 其他类

所以我真的很想知道常用的不同 Java 同步选项是什么,以及它们如何映射到“传统”/理论上的互斥量、信号量、锁和监视器。

干杯!

最佳答案

我将对每个进行简要说明:

  • 同步块(synchronized block)是您的平均临界区。没有太多的控制。一次只能有一个线程获取锁,并在同步范围结束时自动释放锁。
  • 锁是同步块(synchronized block)的一个更灵活的版本。根据实现的不同,它们可能是可重入的,或者可能支持像 tryLock 这样的操作,它只在锁空闲时尝试获取锁,否则立即返回。需要明确解锁锁。
  • 信号量基本上是一个锁,但具有多个线程可以同时进入临界区的附加功能。它基于更一般的“许可”概念进行操作,其中信号量可能具有多个线程想要获取的可用许可。一个线程可以获取一个或多个许可,也可以恢复一个或多个许可。它允许更多地根据“可用资源”而不是“需要保护的代码”来考虑同步。
  • wait/notify 大致相当于条件变量的概念。同样,它们必须受到同步块(synchronized block)的保护,并且只有在被用作监视器的对象上持有锁时调用它们才能正常工作。

关于java - Java 中各种线程同步选项之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10187577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com