0

次のように 実行されるメソッドがあるとします。

public void run()
{  
for(i=loopstart;i<loopend;i++){  
     //some code here to execute. no dependency exists   
}   

loopstart および loopend変数には、ループ実行の最小値と最大値があります。

今私がしなければならないことは、並列に実行するために、このループの実行を 2 から 5 のスレッドに分割することです。これを達成するために、私はこの方法を次のように変更しました

public void run()
{
for(i=thread_start; i<thread_end; i++)
     //some code here to execute.    
}

変数thread_startthread_endは、各スレッドが実行する必要のある範囲です。ループ実行をどのように分割するのが最善でしょうか。範囲内でループ実行があるとします

 5-94   

スレッドの数に応じて、実行のために多くの範囲に分割したいと考えています。
例えば

 threads               ranges    
 2                     5-44, 45-94   
 3                     5-34, 35-65, 66-94   

これらは単なる例です (正確ではありません)。利用可能なスレッドに基づいて実行を分割したい。2スレッド
の場合、

 thread_start=5  ,thread_end=44       1st thread 
 thread_start=45 ,thread_end=94       2nd thread.   

どのように (Java コードを使用して) ループの実行をほぼ同じ長さの範囲に分割する必要がありますか?

4

1 に答える 1

1
public class Looper implements Runnable {

    private int start;
    private int end;

    public Looper(int start, int end){
        this.start = start;
        this.end = end;
    }

    @Override
    public void run() {
        for(int i=start; i<end; i++){
            System.out.println("thread id : " + Thread.currentThread().getId() + "; index : " + i) ;
        }
    }
}

public class Test {

    public static void main(String[] args){
        Thread looper1 = new Thread(new Looper(1,1000));
        Thread looper2 = new Thread (new Looper(1001,2000));
        looper1.start();
        looper2.start();
    }
}

これはあなたが必要なものですか?実行時に利用可能なスレッドを取得する必要がある場合は、ThreadPoolの使用を検討してください。

于 2013-02-03T06:07:58.723 に答える