JAVA代码简单实现多线程操作,建立2个线程,一个线程完成1-10数字打印,一个线程完成A-Z字母打印。要求:一旦出现字母打印,先执行。请按要求完成上述操作。
时间: 2024-10-16 20:13:27 浏览: 22
在Java中,你可以通过`Thread`类和`Runnable`接口来实现这种多线程操作。为了满足题目要求,即字母打印优先于数字打印,我们可以创建一个实现了`Comparator`接口的类来作为线程任务之间的优先级判断器。下面是一个简单的示例:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.PriorityBlockingQueue;
class PrintTask implements Runnable {
private final String content;
private final int priority;
public PrintTask(String content, int priority) {
this.content = content;
this.priority = priority;
}
@Override
public void run() {
System.out.println("Thread started - " + Thread.currentThread().getName());
System.out.println(content);
System.out.println("Thread finished - " + Thread.currentThread().getName());
}
}
public class Main {
public static void main(String[] args) {
PriorityBlockingQueue<PrintTask> queue = new PriorityBlockingQueue<>(Collections.reverseOrder());
// 添加数字打印任务,优先级较低
queue.put(new PrintTask("1", 1));
queue.put(new PrintTask("2", 1));
// ...一直添加到10
// 添加字母打印任务,优先级较高
for (char c = 'A'; c <= 'Z'; c++) {
queue.put(new PrintTask(String.valueOf(c), 2)); // 字母优先级设为2
}
List<Thread> threads = new ArrayList<>();
while (!queue.isEmpty()) {
PrintTask task = queue.take();
Thread thread = new Thread(task, task.content.charAt(0) + "-Printer");
threads.add(thread);
thread.start();
}
for (Thread t : threads) {
try {
t.join(); // 等待所有线程执行完毕
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
在这个例子中,我们使用了`PriorityBlockingQueue`,它内部实现了一个堆结构,可以保证元素按照优先级排序。当有新任务加入时,会调整队列顺序以保持优先级。
阅读全文