根据Java中的线程划分循环执行

时间:2013-02-03 05:53:45

标签: java multithreading

假设我有一个方法运行,如下所示,

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

loopstart&amp; loopend 变量具有循环执行的最小值和最大值。

现在我要做的是将这个循环执行分成2到5个线程,以便并行执行。要做到这一点,我已将此方法更改为

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

变量 thread_start thread_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代码)在几乎相同的长度范围内划分循环执行?

1 个答案:

答案 0 :(得分: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。