java中有wait / notify的替代吗?
我有两个主题:
thread1:
run() {
while(true) {
data = getDataFromDatabase()
changedData = performSomeChanges(data)
commitUpdateDataToDatabase(changedDate)
(send signal to thread2 to start and wait for signal for next repetition)
}
}
thread2:
run() {
while(true) {
(wait for signal from thread1)
data = getDataFromDatabase()
changedData = performSomeChanges(data)
commitUpdateDataToDatabase(changedDate)
(send signal to thread1)
}
}
我希望他们之间有某种同步。现在我为特殊的公共对象使用wait / notify。
答案 0 :(得分:2)
首先,实现示例的简单方法只使用一个线程:
run() {
while(true) {
// old thread 1 code
data = getDataFromDatabase()
changedData = performSomeChanges(data)
commitUpdateDataToDatabase(changedDate)
// old thread 2 code
data = getDataFromDatabase()
changedData = performSomeChanges(data)
commitUpdateDataToDatabase(changedDate)
}
}
在两个线程之间执行交替没有明显的(对我而言)优势。还有一些明显的缺点;即复杂性,以及同步和线程切换的(微小的)性能损失。
但是假设你确实有合理的理由在两个线程之间交替,那么有很多方法可以做到:
正如您目前所做的那样使用wait
和notify
... (IMO,没有真正的需要来寻找替代方案。如果使用得当,它们的工作正常!不可否认,一些Java程序员还没有掌握这个......)
使用java.util.concurrent.Semaphore
并让每个线程在获取和释放之间交替。
使用java.util.concurrent.Lock
和锁的交替所有权。
使用BlockingQueue
并传递"令牌"对象来回。
等等
答案 1 :(得分:0)
有无数的方法可以做到。
例如,您可以使用ReentrantLock或CountDownLatch或ArrayBlocking或ArrayBlockingQueue
PS:wait / notify有什么问题?为什么你想要别的东西?