我正在使用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;
}
答案 0 :(得分:1)
一个非常简单的解决方案:只启动一个消费者线程。
您最多只需要运行该方法的一个实例。还是有其他情况? 如果只有一个线程,则只能运行该方法的一个实例。只要该线程忙,就没有其他人可以从队列中消费。