2016-10-23 4 views
0

私はマルチスレッドを使用して、データを処理する大きなブロックを小さなチャンクに分割しようとしています。
私の問題は、スレッドがデータスペースの指定された部分に対して実行されていないことです。例えば不正な変数を含むJavaスレッドのインスタンス化

スレッド-2が0の範囲処理しなければならない - 私は私の新しいを呼び出すと2000

から1001の範囲を処理しなければならない1000年

スレッド-3をスレッドをバックツーバック私は得る:

スレッド2 = 0から1000

スレッド-3 = 0から1000

を、私は私が得る2つのスレッド・コールの間にスレッドsleep(3000)を追加します。

スレッド-2 = 0から1000

スレッド-3 = 0から2000

私は私が間違っていると、本当にapprec希望てるかわからないんだけどいくつかの指導をする。 1001000および1001001 - - Snippitsに

注以下、Iは以下

1,000,000ある例では上記数値実際の通話範囲を略すスレッドコールを詳細mainメソッドから1002000

スニペット。

 try { 
     int start = 1000000; 
     int end = 1001000; 
     new Thread(new MyThread(start, end, PUBLIC_INVALID_LIST)).start(); 
     Thread.sleep(3000); 
     start = 1001001; 
     end = 1002000; 
     new Thread(new MyThread(start, end, PUBLIC_INVALID_LIST)).start(); 
    } catch (InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
    } 

スレッドを拡張するMyThreadからのスニペット これは私がrun()方法を介してメインメソッドからのparamsを渡しています方法について詳しく説明:まだ

//variables to pass from constructor to run() 
private int startIndex; 
private int endIndex; 
private ArrayList PUBLIC_INVALID_LIST; 

MyThread(int startIndex, int endIndex, ArrayList PUBLIC_INVALID_LIST) { 

    this.startIndex = startIndex; 
    this.endIndex = endIndex; 
    this.PUBLIC_INVALID_LIST = PUBLIC_INVALID_LIST; 

}//end of initializer 

public void run() { 
+1

だけでなく、あなたが私はあなたが 'thread.startを呼び出しているとき' MyThread'が可変 'ArrayListのPUBLIC_INVALID_LIST'の内側に物事を並べ替えていることを想像することができます投稿VEの何から()'。スレッドがarraylistのデータをどのように操作しているのかを投稿できる場合。 'Thread.sleep()'がうまく動作するのは意味がありません。また、2回目の試行として、リスト全体を渡すのではなく、 'list.subList(from、to)'メソッドでリストを中断してください。 – AntJavaDev

+0

@AntJavaDevプログラムの目的は、パスのリストを見て、もはや存在しないものを特定することです。存在しなくなったパスは、SPを介してテーブルに書き込まれたpath_idを持ちます。 'ArrayList PUBLIC_INVALID_LIST'は、スレッドを起動する前に存在しなくなった、以前に観測されたすべてのパスを検索するSQLクエリの戻り値であり、スレッドによって変更されません。各スレッドは、startIndexからendIndexの範囲でpath_idsを取得するために独自のSQLクエリを実行します。そして、そのリストをフィルタリングして、 'PUBLIC_INVALID_LIST'内のpath_idを削除してください。 – BigDerpa

+0

これまでに共有したコードには何も目立ちません。参考になるMyThreadクラスの 'run'メソッドなど、もっとコードを共有できたら。また、データをキューに格納して処理している間にアイテムをプルダウンするだけではない理由がありますか? –

答えて

0

わからない問題が渡す変数であったものが、私はint型を使用して作業する方法で、代替パスを得ました[]

int sizeSet = (max /100000) + 1;//max is highest path_id value 
    int[] start_range = new int[sizeSet]; 
    int[] end_range = new int[sizeSet]; 
    start_range[0] = 1;//first possible path_id 
    end_range[0] = 100000;//end point of first possible range 
    int rangeIndex = 1;//create counter for while loop 
    while(rangeIndex < sizeSet){ 
     start_range[rangeIndex] = start_range[rangeIndex - 1] + 100000; 
     end_range[rangeIndex] = end_range[rangeIndex - 1] + 100000; 
     ++ rangeIndex; 
    }//end range setting while block 
    rangeIndex = 0;//reset index counter 
    while(rangeIndex < sizeSet){ 
     new Thread(new MyThread(start_range[rangeIndex], end_range[rangeIndex], PUBLIC_INVALID_LIST)).start(); 
     ++ rangeIndex; 
    } 
関連する問題