java同时启动多个 无法打印_java 实现两个线程,一个打印奇数,一个打印偶数,这两个线程并发执行...
时间: 2024-05-03 09:17:37 浏览: 136
可以使用Java中的多线程机制来实现两个线程并发执行,一个打印奇数,一个打印偶数。具体实现如下:
```java
public class PrintOddEven {
private static final int MAX_NUMBER = 10;
private static int currentNumber = 1;
private static final Object lock = new Object();
public static void main(String[] args) {
Thread oddThread = new Thread(new PrintOdd());
Thread evenThread = new Thread(new PrintEven());
oddThread.start();
evenThread.start();
}
static class PrintOdd implements Runnable {
@Override
public void run() {
synchronized (lock) {
while (currentNumber <= MAX_NUMBER) {
if (currentNumber % 2 != 0) {
System.out.println(Thread.currentThread().getName() + ": " + currentNumber);
currentNumber++;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
static class PrintEven implements Runnable {
@Override
public void run() {
synchronized (lock) {
while (currentNumber <= MAX_NUMBER) {
if (currentNumber % 2 == 0) {
System.out.println(Thread.currentThread().getName() + ": " + currentNumber);
currentNumber++;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}
```
在上面的代码中,我们使用了一个共享对象`lock`来实现两个线程之间的同步,通过`synchronized`关键字锁定`lock`对象,保证每次只有一个线程能够获取到锁,进而保证两个线程的交替执行。
在`PrintOdd`线程中,如果当前数字是奇数,则打印输出,并将`currentNumber`加1,然后通过`notifyAll()`方法唤醒`PrintEven`线程。如果当前数字是偶数,则调用`wait()`方法等待,直到被`PrintEven`线程唤醒。
在`PrintEven`线程中,如果当前数字是偶数,则打印输出,并将`currentNumber`加1,然后通过`notifyAll()`方法唤醒`PrintOdd`线程。如果当前数字是奇数,则调用`wait()`方法等待,直到被`PrintOdd`线程唤醒。
通过这种方式,我们就可以实现两个线程并发执行,一个打印奇数,一个打印偶数的功能。
阅读全文