生产者消费者场景,停止从队列读取直到执行完成

时间:2017-04-19 11:08:12

标签: java queue producer-consumer blockingqueue

我正在使用BlockingQueue实现生产者消费者场景。

这是我的消费者运行方法:

@Override
    public void run() {
        try {
            Message msg;
            System.out.println("Consumer started");
            //consuming messages until exit message is received

            while(!(msg=queue.take()).getMsg().equalsIgnoreCase("exit")) {

                //




            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

当我从队列中取出一些东西时,我打算调用下面的方法,但这是一个条件。我想运行这种方法的一个方面。我不想从队列中消耗,直到我从下面的方法返回。

我一直在努力,因为我如何在while循环中包含它。

public boolean runStrategy(String msg) {

        ExecutionContext executionContext = new ExecutionContext();

        String[] filePathArray = msg.split("/");

        String campaignForType = filePathArray[6];// .equals("Profiles")/events etc etc

        if (campaignForType.equalsIgnoreCase("Profiles")) {

            executionContext.setExecutionStrategy(new ProfileUploadExecutionStrategy());
            return executionContext.executeCampaign(filePathArray, msg);

        } else if (campaignForType.equalsIgnoreCase("Events")) {

           /* executionContext.setExecutionStrategy(new EventExecutionStrategy());
            executionContext.executeCampaign(filePathArray, msg.toString());*/

            return true;
        }

        return true;
    }

1 个答案:

答案 0 :(得分:1)

一个非常简单的解决方案:只启动一个消费者线程。

您最多只需要运行该方法的一个实例。还是有其他情况? 如果只有一个线程,则只能运行该方法的一个实例。只要该线程忙,就没有其他人可以从队列中消费。