创建两个线程,要求如下: (1)一个线程输出100个1~26,另一个线程输出100个A~Z。 (2)一个线程使用集成Thread 类的写法,另一个线程使用实现Runnable接口的写法。给出完整的Java代码
时间: 2024-11-22 20:22:15 浏览: 16
启动两个线程,一个线程打印1~52,另一个线程打印A~Z
5星 · 资源好评率100%
为了满足这些要求,我们可以按照以下方式编写Java代码:
首先,我们创建一个实现了Runnable接口的类,用于打印数字和字母:
```java
public class PrintNumbersAndLetters implements Runnable {
private int num;
private char letter;
public PrintNumbersAndLetters(int startNum, char firstChar) {
this.num = startNum;
this.letter = firstChar;
}
@Override
public void run() {
while (num <= 100 || letter <= 'Z') {
if (num <= 100) {
System.out.print(num++);
} else {
System.out.print(letter++);
}
System.out.flush(); // 每次打印后刷新输出,防止缓冲区溢出
}
}
}
```
接下来,我们将创建两个线程,一个使用`Thread`类,另一个使用`ExecutorService`:
**使用`Thread`类的方式:**
```java
public class Main {
public static void main(String[] args) {
PrintNumbersAndLetters numbers = new PrintNumbersAndLetters(1, 'A');
PrintNumbersAndLetters letters = new PrintNumbersAndLetters(1, 'A');
Thread numberThread = new Thread(numbers, "NumberThread");
Thread letterThread = new Thread(letters, "LetterThread");
numberThread.start();
letterThread.start();
}
}
```
**使用`ExecutorService`和`Future`的方式:**
```java
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2); // 使用固定大小的线程池
Future<?> numberTask = executor.submit(new PrintNumbersAndLetters(1, 'A'));
Future<?> letterTask = executor.submit(new PrintNumbersAndLetters(1, 'A'));
try {
numberTask.get();
letterTask.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown(); // 关闭线程池
}
}
}
```
以上代码创建了两个线程,一个打印1到100的数字,另一个打印大写字母A到Z。第一个例子使用`Thread`类直接创建线程,第二个例子则使用`ExecutorService`管理线程,允许更灵活的并发控制。
阅读全文