📅  最后修改于: 2023-12-03 15:22:18.803000             🧑  作者: Mango
在Java中,我们可以通过创建两个线程来轮流打印奇数和偶数。
我们可以通过以下步骤来实现此目标:
下面是基于以上步骤的Java代码实现:
class EvenThread implements Runnable {
private final Object mutex;
private static int count;
public EvenThread(Object mutex) {
this.mutex = mutex;
this.count = 2;
}
@Override
public void run() {
while(count <= 10) {
synchronized(mutex) {
System.out.println(Thread.currentThread().getName() + ": " + count);
count += 2;
mutex.notify();
try {
mutex.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class OddThread implements Runnable {
private final Object mutex;
private static int count;
public OddThread(Object mutex) {
this.mutex = mutex;
this.count = 1;
}
@Override
public void run() {
while(count <= 9) {
synchronized(mutex) {
System.out.println(Thread.currentThread().getName() + ": " + count);
count += 2;
mutex.notify();
try {
mutex.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class Main {
public static void main(String[] args) {
Object mutex = new Object();
Thread evenThread = new Thread(new EvenThread(mutex), "EvenThread");
Thread oddThread = new Thread(new OddThread(mutex), "OddThread");
evenThread.start();
oddThread.start();
try {
evenThread.join();
oddThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在上面的代码中,我们使用了Object对象作为互斥锁(mutex)来保证两个线程互斥访问共享变量count。
首先我们创建一个mutex对象,并将其传递给OddThread和EvenThread的构造函数。
然后,我们分别创建OddThread和EvenThread对象,并将mutex对象作为参数传递给它们的构造函数。
在每个线程的run()方法中,我们使用while循环来打印出count的值,同时使用synchronized(mutex)来保证线程的互斥访问。
在每次计数之后,我们调用mutex.notify()来唤醒另一个线程,然后调用mutex.wait()来等待另一个线程完成打印操作。
最后,在main()方法中,我们启动OddThread和EvenThread,并使用join()方法来等待它们完成打印工作。
输出结果如下:
OddThread: 1
EvenThread: 2
OddThread: 3
EvenThread: 4
OddThread: 5
EvenThread: 6
OddThread: 7
EvenThread: 8
OddThread: 9
这就是使用Java中的两个线程按递增顺序打印偶数和奇数的实现方式。