2017-08-23 3 views
1

ブロックされたキューからデータを消費しようとしています。実行メソッドで消費メソッドを実装する必要があります。 runメソッドで実装する必要があります 私は、次のしているコード私は、「Runメソッド」Javaでのマルチスレッドのrunメソッドを使用したメソッドの呼び出し

@Override 
    public void run() { 

     // TODO Auto-generated method stub 

    } 

の下で実行するために、上記の方法をしようとしています

@Override 
public String consume(String lastSourceOffset, int maxBatchSize, BatchMaker batchMaker) throws StageException { 
     long nextSourceOffset = 0; 
     if (lastSourceOffset != null) { 
      nextSourceOffset = Long.parseLong(lastSourceOffset); 
     } 
     if (queue.size() != 0) { 
       Record record = getContext().createRecord("some-id::" + nextSourceOffset); 
       Map<String, Field> map = new HashMap<>(); 
       try { 
        map.put("fieldName", Field.create(queue.take())); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       record.set(Field.create(map)); 
       batchMaker.addRecord(record); 
       ++nextSourceOffset; 

      } 


     return String.valueOf(nextSourceOffset); 
    } 

は、私はそれを呼び出すことができる方法はあります。

public class ConsumeRunner implements Runnable{ 

     String lastSourceOffset; 
     int maxBatchSize; 
     BatchMaker batchMaker; 
     public ConsumeRunner(String lastSourceOffset, int maxBatchSize, BatchMaker batchMaker) 
     { 
      this.lastSourceOffset=lastSourceOffset; 
      this.maxBatchSize=maxBatchSize; 
      this.batchMaker=batchMaker; 
     } 

     @Override 
     public void run() { 
      consume(lastSourceOffset, maxBatchSize, batchMaker); 

     } 
    } 

あなたが代わりに引数なしのコンストラクタのを除いて、通常はあなたのスレッドを作成するには、新しいカスタムいずれかを使用します。

+0

私はhttps://stackoverflow.com/questions/32760391/calling-different-methods-of-same-class-using-multi-threading-in-javaで投稿を読みましたが、私は同じものを実装することができません – sri

+0

それはどういう意味ですか?あなたはrunメソッドが本質的に '消費する 'ようにすべてを設定することを意味しますか? –

+0

私は消費方法を実行するためにrunメソッドを作っています。 – sri

答えて

1

はあなただけそうのようなパラメータに取るクラスのコンストラクタを作ることができます。そうでなければ、それは同じです。

関連する問題