【发布时间】:2017-06-16 12:49:04
【问题描述】:
根据本文档,不鼓励在 Kotlin 中使用 wait 和 notify:https://kotlinlang.org/docs/reference/java-interop.html
等待()/通知()
Effective Java Item 69 建议优先使用并发实用程序而不是 wait() 和 notify()。因此,这些方法不适用于 Any 类型的引用。
但是该文档没有提出任何正确的方法。
基本上,我想实现一个服务,它会读取输入数据并处理它们。如果没有输入数据,它将暂停自己,直到有人通知有新的输入数据。类似的东西
while (true) {
val data = fetchData()
processData(data)
if (data.isEmpty()) {
wait()
}
}
编辑:
我不想使用这些不推荐的方法(反模式),我真的很想知道如何正确地做到这一点。
在我的情况下,fetchData 从数据库中读取数据,因此在我的情况下无法使用队列。
【问题讨论】:
-
你检查了 Effective Java Item 69 吗?
-
您可以使用 Kotlin 协程中的演员来实现您的服务。它等待项目被发送到通道。更多信息在这里:github.com/Kotlin/kotlinx.coroutines/blob/master/…
-
您可以将任何对象转换为
java.lang.Object并轻松实现此类反模式。 -
目前协程中的
actor已被弃用,所以这也不是一个好的选择。
标签: kotlin