【发布时间】:2014-07-27 22:40:20
【问题描述】:
我了解同步的概念,但我现在确定为什么要这样实现,所以我需要一点帮助:
我有 2 个线程:
PeriodicalThread 将定期接收数据(假设每 5 秒)并将其放入Queue(目前使用ArrayDeque,但我不知道是否有任何其他Queue 实现会更好)
ProccessThread 会不断检查Queue 是否为空。如果不为空,则处理数据(FIFO)。
所以,起初我的实现是:
// Both threads are inner class so they have access to Queue
private Queue queue;
private boolean isReadyToProccess;
class PeriodicalThread extends Thread {
public void run() {
while(true) {
if(isNewDataAvailable) {
// create Data object
queue.add(data);
}
}
}
}
class ProcessThread extends Thread {
public void run() {
while(true) {
if(!queue.isEmpty() && isReadyToProccess) {
Data data = queue.poll();
processData(data);
}
}
}
}
private void processData(Data data) {
// this method send data over network, and the server response callback
// changes isReadyToProcess value to true.
}
然后当想要处理同步时,我不知道我是否应该使用lock 对象(以及它是如何实现的)或者是否已经有一个包Queue 实现是线程安全的(因为 add() 和 poll() 方法)
编辑:我忘记了标志isReadyToProcess 指示下一个队列Data 对象是......好吧,准备好进行处理了。这个标志也应该同步。
【问题讨论】:
-
查看
BlockingQueue。 -
布尔标志如何告诉您有关队列中下一个对象的信息?如果队列中有很多对象怎么办?
标签: java multithreading queue