我需要并行运行两个线程。
1) PrimeThread,它计算从1到100的质数。2) evenThread,它计算从1到100的偶数。
我已经实现了质数和偶数逻辑。不要把注意力放在上面。我的问题是,
我想用下面的方式打印数字。10个素数,10个偶数,10个素数,10个偶数,其余的。
这有可能吗?
我使用了sleep()方法,但它不起作用。请帮帮我。谢谢。
发布于 2012-11-17 18:23:58
我需要并行运行两个线程。
..。
我想用下面的方式打印数字。10个素数,10个偶数,10个素数,10个偶数,其余的。
这似乎是矛盾的:您想要的输出意味着您真正想要的是以交错的方式按顺序运行任务。为什么不创建两个方法:printNextPrimes(int number)和printNextEvens(int number),并在单线程循环中调用它们:
for (int i = 0; i < 10; i++) {
printNextPrimes(10);
printNextEvens(10);
}发布于 2012-11-17 15:03:30
听起来你在找一个Semaphore
每个线程都有自己的信号量。在输出10个数字后,它将释放另一个线程拥有的信号量,并获取它自己的信号量。这将使另一个线程再次启动,并阻止该线程,直到它再次被释放。
发布于 2012-11-17 16:10:07
如下所示:
public class Test {
static Object lock = new Object();
static boolean printPrime = true;
static boolean printEven;
static class PrimeTread extends Thread {
public void run() {
int n = 0;
while (n < 100) {
synchronized (lock) {
if (printPrime) {
for (int i = 0; i < 10; i++) {
System.out.println(nextPrime());
n++;
}
printPrime = false;
printEven = true;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
}
private int nextPrime() {
return 31;
}
}
static class EvenTread extends Thread {
public void run() {
int n = 0;
while (n < 100) {
synchronized (lock) {
if (printEven) {
for (int i = 0; i < 10; i++) {
System.out.println(nextEven());
n++;
}
printPrime = true;
printEven = false;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
}
private int nextEven() {
return 2;
}
}
public static void main(String[] args) {
new EvenTread().start();
new PrimeTread().start();
}
}https://stackoverflow.com/questions/13428390
复制相似问题