2013-08-07 30 views
1

如何调整给定k个线程之间的公平性以生成一些输出?
换句话说,想象一下,我们有k个线程打印“1”和n个线程打印“2”。
现在我们如何才能在线程之间建立公平性,使得每个线程打印(例如“1”)与其他(k-1)打印(例如“1”)一样多,而对于n个线程打印“2”也是如此。调整多线程公平性

+0

我想我必须处理它的机智等待和通知方法,但我不知道如何? – user2625638

回答

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(); 
     } 
    } 
} 

你应该重复的主题打印2

1

类似的形式在创建线程,创建一个数组[0..numThreads -1]的空信号量,一个用于你要创建的每个线程。在其创建时向每个线程发送递增信号量索引0..numThreads-1。在线程函数中,让它在其信号[index]上等待,然后打印一些内容,然后发信号给[(index + 1)mod numThreads]信号量,然后循环再次等待信号量[index]。

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

扔在一个信号单位,在任何地方。

+0

你能解释一下吗? – user2625638

+0

它实际上在线程周围传递了一个“打印令牌”。当一个线程打印了一些东西时,它将令牌传递给下一个,并以循环方式继续。 –

+0

我只想知道在哪里等待()以及在哪里通知线程来处理此问题。 – user2625638