2017-04-19 6 views
0

私は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(); 
     } 

と私はキューから何かを得る場合は、以下のメソッドを呼び出すするつもりが、ここでの条件です:

これは私の消費者はメソッドを実行しています。私はこの方法の1つのisntanceを実行したい。私は、以下のメソッドからの戻り値を得るまで、キューから消費したくありません。

私はこれを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

かなり簡単な解決策:消費者スレッドを1つだけ開始します。

実行中のメソッドのインスタンスを1つにします。それとも、他の場合ですか? スレッドが1つしかない場合、メソッドのインスタンスは1つしか実行できません。そのスレッドがビジー状態である限り、キューから消費できる他のスレッドはありません。

関連する問題