2017-09-27 10 views
-1

私は変数を持っていると私は今、私は、すべてのスレッドがスレッド1が読み込むように、独自の変数を作成するために、値の開始変数を使用したい、この複数のスレッドと単一のメインオブジェクト変数

 ExecutorService service = Executors.newFixedThreadPool(nThreads); 
     int start = 0; 
     while(nThreads > 0) { 
     nThreads--; 
     service.execute(new Runnable() { 

      @Override 
      public void run() { 

      } 
     }); 
     } 

のようなループでは、いくつかのスレッドを作成スレッド1が変更を行ったときなどにのみスレッド2がそれを読み込みます。値を読み取った後、あるスレッドの変更をその変数に変更しても、他のスレッドの変数には影響しません。

どうすればいいですか?

元の問題は、フェッチしたいレコードが500あり、別のスレッドに作業を分けたいということです。すぐに50レコードしか取得できません。スレッド1を使用して最初の150レコードをフェッチし、スレッド2を使用して次の150をフェッチします。私は、メインスレッドにある総レコード数(変数totalRecordsなど)に関する情報を持っています。

ここでは、スレッドごとに1レコードのレコード番号とレコード数を取得する必要があります。どうすればいいのですか?

+1

必要なものは不明です。詳しく教えてください。 –

+0

私は仕事を別のスレッドに分けたいと思う500のレコードを持っています。すぐに私は50レコードしか取れません。今私はスレッド1を使用して最初の150のレコードをフェッチし、スレッド2を使用して次の150をフェッチします。私は、メインスレッドにある総レコード数(変数totalRecordsなど)に関する情報を持っています。今私はレコード番号とレコードを取得する必要がありますレコードの数を開始するすべてのスレッド情報を送信する必要があります。どうすればいいのですか。 – SS94

+0

[もっと速い回答を得るために、どのような状況で私の質問に「緊急」や他の類似のフレーズを追加することができますか?](// meta.stackoverflow.com/q/326569) - 概要はこれがボランティアに対処する理想的な方法であり、おそらく回答を得ることは非生産的です。これをあなたの質問に追加しないでください。 – halfer

答えて

0
for (int currentRecord = 0; currentRecord < totalRecords; currentRecord += 150) { 
     final int startRecord = currentRecord; 
     final int endRecord = startRecord + 150; 

     service.execute(new Runnable() { 

     @Override 
     public void run() { 
      for (int r = startRecord; r < endRecord && r < totalRecords; r++) { 
      // Process record no. r 
      } 
     } 
     }); 
    } 
関連する問題