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 回答