分别使用继承Thread类和实现Runnable接 口的方式启动两个线程,其中一个线程输出奇数,另 个线程输出偶数。
时间: 2024-12-05 18:15:34 浏览: 31
在Java中,有两种常见的方式来创建并启动一个新的线程:继承`Thread`类或实现`Runnable`接口。这里我会分别介绍这两种方法,并为你演示如何让一个线程打印奇数,另一个线程打印偶数。
**1. 继承Thread类:**
首先,你需要为每个要执行的任务定义一个子类,然后重写`run()`方法来包含你要执行的具体操作。对于奇数和偶数,你可以维护一个计数器,每次递增时检查它是奇数还是偶数。
```java
public class OddEvenThread extends Thread {
private int number = 0;
public OddEvenThread(String name) {
super(name);
}
@Override
public void run() {
while (true) {
if (number % 2 == 0) {
System.out.println("Current even number: " + number++);
} else {
System.out.println("Current odd number: " + number++);
}
// 可以添加同步控制避免多个线程同时修改number
synchronized (this) {
try {
wait(); // 等待下一个奇数或偶数
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
// 启动线程
OddEvenThread evenThread = new OddEvenThread("Even Thread");
evenThread.start();
OddEvenThread oddThread = new OddEvenThread("Odd Thread");
oddThread.start();
```
**2. 实现Runnable接口:**
在这种情况下,你可以创建一个实现了`Runnable`接口的类,然后传递给`Thread`构造函数。同样地,在`run()`方法中处理奇数和偶数逻辑。
```java
public class OddEvenRunnable implements Runnable {
private int number = 0;
public OddEvenRunnable(String name) {
this.name = name;
}
@Override
public void run() {
while (true) {
if (number % 2 == 0) {
System.out.println(name + ": Current even number: " + number++);
} else {
System.out.println(name + ": Current odd number: " + number++);
}
// 同样需要同步和等待
synchronized (this) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
// 创建Runnable实例并传给Thread
OddEvenRunnable evenRunnable = new OddEvenRunnable("Even Runnable");
Thread evenThread = new Thread(evenRunnable);
evenThread.start();
OddEvenRunnable oddRunnable = new OddEvenRunnable("Odd Runnable");
Thread oddThread = new Thread(oddRunnable);
oddThread.start();
```
两种方法的核心逻辑是一样的,只是第一种方式使用了类继承,而第二种方式用接口实现。你还可以考虑使用Future和Callable接口来更好地管理线程结果,但以上示例已经展示了基本的概念。如果你有任何关于这两个例子的问题,或者想了解更多细节,请告诉我。
阅读全文