调整多线程的公平性

时间:2013-08-07 16:12:50

标签: java multithreading

如何调整给定k个线程之间的公平性以产生一些输出? 换句话说,想象我们有k个线程打印“1”和n个线程打印“2” 现在我们如何在线程之间设置公平性,以便每个线程打印(例如“1”)和其他(k-1)打印(例如“1”)一样多。并且n线程打印“2”相同。

2 个答案:

答案 0 :(得分:1)

在创建线程之前,创建一个空信号量的数组[0..numThreads-1],每个线程对应一个您要创建的线程。向其创建的每个线程发出一个递增的信号量索引0..numThreads-1。

在线程函数中,让它等待其信号量[index],然后打印一些东西,然后发信号通知[(index + 1)mod numThreads]信号量,然后循环再次等待信号量[index]。 / p>

一旦你做到了,就什么都不应该发生。

随身携带一个信号量单位。

答案 1 :(得分:0)

好吧,我理解了一点,如果你把这个号码发给他们的构造函数,你可以让一个线程打印一个数字。 例如:

public class MyThread extends Thread 
{ 
   int number = 0;
   public MyThread(int number) {
      this.number = number;
   }

   @Override
   public void run()
   { 
      while(true) {
         System.out.println(this.number); 
         this.sleep(1000);//control exception
      }
   }

}

然后在你的主要

public class Main() {
    public static void main(String[] args) {
       int k = 10
       for(int i = 0; i < k; k++) {
          MyThread mt = new MyThread(1);
          mt.start();
          mt.join();
       }
    }
}

你应该为Thread printing 2重复一个类似的表格