如何调整给定k个线程之间的公平性以产生一些输出? 换句话说,想象我们有k个线程打印“1”和n个线程打印“2” 现在我们如何在线程之间设置公平性,以便每个线程打印(例如“1”)和其他(k-1)打印(例如“1”)一样多。并且n线程打印“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重复一个类似的表格