我正在创建一个应用程序,其中有多个阶段 - 每个阶段都会在Amazon Simple Work Flow(SWF)中将消息发送到我的队列...应用程序应为每个收到的消息启动一个新线程。
如何实现等待部分 - 以便应用程序不断扫描队列中的新消息并在收到消息时采取措施?
答案 0 :(得分:2)
您所询问的是生产者 - 消费者模型 你可以阅读它here
基本理念:网站是制作人,您作为客户是消费者。
你等待(),直到听众收到一条消息然后notifAll()
class WaitForAmazon{
private boolean available = false;
private int contents;
public synchronized int consumer() {
while (available == false) {
try {
wait();
} catch (InterruptedException e) { }
}
available = false;
notifyAll();
return contents;
}
public synchronized void producer(int value) {
while (available == true) {
try {
wait();
} catch (InterruptedException e) { }
}
contents = value;
available = true;
notifyAll();
}
}
答案 1 :(得分:2)
BlockingQueue
及其实施LinkedBlockingQueue
在这里很有用。
当Thread
想要通过调用
take
获取某些内容时
queue.take()
并且队列将为空,这样的线程将等待,直到其他线程通过调用
将某些东西放入队列queue.put(something).
此外,如果队列已满,queue.put()
将使线程等待,直到队列中有新元素的空间。
答案 2 :(得分:0)
您可以采用poll
queue
while loop
的一种方式,直到您在{{1}}机制中收到新邮件。如果您收到新邮件,则可以调用自己的操作。< / p>
答案 3 :(得分:0)
使用serversocket:
特别是,<。> .accept()方法等待有人要求连接。然后,您可以实例化一个新线程,传递保持连接所需的参数(地址,端口等)。