2012-05-16 11 views
2

配置文件分发数字范围的各线程之间

ThreadSize = 10 
StartRange = 1 
EndRange = 1000 

我有一个配置文件以上,其中我有线程数我想使用与客户端实例是能够使用ID范围从1至1000并且假设客户端线程被设置为10,所以每个线程的范围可以是100个id(基本上通过将结束范围除以线程大小),它可以使用而不用跨过其他线程。所以我想是每个线程应使用100点的ID从范围,而不对其他threads-步进例如

Thread1 will use 1 to 100 (id's) 
// generate a random number between 1 to 100 and keep on printing values until it has generated all the random values between 1 to 100 
Thread2 will use 101 to 200 (id's) 
// generate a random number between 101 to 200 and keep on printing values until it has generated all the random values between 101 to 200 
Thread3 will use 201 to 300 (id's) 
// generate a random number between 201 to 300 and keep on printing values until it has generated all the random values between 201 to 300 

----- 
---- 
Thread10 will use 901 to 1000 
// generate a random number between 901 to 1000 and keep on printing values until it has generated all the random values between 901 to 1000 

我知道如何编写多线程程序,但不知道我应该如何划分不同的范围线程。

public static void main(String[] args) { 

    for (int i = 1; i <= threadSize; i++) { 
     new Thread(new ThreadTask(i)).start(); 
    } 
} 


class ThreadTask implements Runnable { 
    private int id; 

    public ThreadTask(int id) { 
    this.id = id; 
    } 

    public synchronized void run() { 

    } 
} 
+0

传递的开始和结束号码为每个线程在构造函数或添加一个方法给线程接受范围。 –

回答

4

每个线程获取N = (EndRange - StartRange + 1)/ThreadSize数字。

主题编号i获取范围(StartRange + i*N) - (StartRange + i*N + N - 1)

在你的例子N = (1000 - 1 + 1)/10 = 100

主题i = 0将得到范围(1 + 0*100) - (1 + 0*100 + 100 - 1) = 1 - 100

主题i = 1将得到范围(1 + 1*100) - (1 + 1*100 + 100 - 1) = 101 - 200

...