gpt4 book ai didi

Java线程同步对象的等待和通知

转载 作者:行者123 更新时间:2023-11-30 08:00:39 25 4
gpt4 key购买 nike

当我们在线程环境中使用wait和notify时。我有一个类来处理数据作为后台进程。当没有数据要处理时,应该调用 wait。

synchronized(some_object){
wait();
}

在另一个类(class)中,我再次添加数据。我需要调用 notify() 方法。

synchronized(some_object){
runnabale_object.notify();
}

为什么我应该在这两个不同的类中使用相同的对象作为同步块(synchronized block)。据我了解,同步用于

The "Synchronized" keywords prevents concurrent access to a block of code or object by multiple Threads.

但这两个是不同的 block 。但当我们使用多线程时我可以理解这个问题。虽然一个线程阻塞其他线程可以在同一线程调用notify之前调用notify。

我的问题

  • 我们可以在单线程环境中使用不同的锁对象(synchronized(object))吗?
  • 当我们在不同的类中进行等待和通知时,使用相同锁对象的最佳方法是什么?

最佳答案

Can we use different lock objects (synchronized(object)) for single threaded environment?

在单线程环境中,您不需要锁。您可以使用任何您想要的东西,也可以什么都不用。

在单线程环境中,您可以保证没有线程正在等待(),因此notify()不会执行任何操作。

Best way of use same lock object when we have wait and notify in different classes?

当您notify()时,您必须执行状态更改。当您在循环中 wait() 时,您会经常检查状态更改。如果你不这样做,你可能会遇到两个问题。

  • notify() 丢失
  • wait() 被虚假唤醒,即没有通知。

关于Java线程同步对象的等待和通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31981759/

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