java-如何不断等待事件发生

时间:2012-06-04 10:05:39

标签: java

我正在创建一个应用程序,其中有多个阶段 - 每个阶段都会在Amazon Simple Work Flow(SWF)中将消息发送到我的队列...应用程序应为每个收到的消息启动一个新线程。

如何实现等待部分 - 以便应用程序不断扫描队列中的新消息并在收到消息时采取措施?

4 个答案:

答案 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:

serversocket

特别是,<。> .accept()方法等待有人要求连接。然后,您可以实例化一个新线程,传递保持连接所需的参数(地址,端口等)。