在Java中,`ExecutorService` 是一个用于异步执行任务的框架,它使得线程的创建和管理变得简单。下面是一个使用 `ExecutorService` 的基本示例,展示了如何创建一个简单的任务调度类。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
// 定义一个任务类,实现Runnable接口
class Task implements Runnable {
private String command;
public Task(String s) {
this.command = s;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " Start. Command = " + command);
processCommand();
System.out.println(Thread.currentThread().getName() + " End.");
}
// 模拟任务执行
private void processCommand() {
try {
Thread.sleep(500); // 模拟任务执行耗时
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public String toString() {
return this.command;
}
}
// 定义一个任务调度类
public class TaskScheduler {
private final int numberOfThreads;
private ExecutorService executor;
public TaskScheduler(int numberOfThreads) {
this.numberOfThreads = numberOfThreads;
this.executor = Executors.newFixedThreadPool(numberOfThreads);
}
// 提交任务到线程池
public void execute(Runnable task) {
executor.execute(task);
}
// 关闭线程池
public void shutdown() {
executor.shutdown();
try {
// 等待所有任务完成
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
// 取消当前正在执行的任务
executor.shutdownNow();
}
} catch (InterruptedException ie) {
// 当前线程在等待时被中断
executor.shutdownNow();
Thread.currentThread().interrupt();
}
}
public static void main(String[] args) {
TaskScheduler scheduler = new TaskScheduler(5); // 创建一个有5个线程的线程池
for (int i = 0; i < 10; i++) {
Runnable worker = new Task("" + i);
scheduler.execute(worker);
}
scheduler.shutdown();
}
}
这段代码首先定义了一个 `Task` 类,它实现了 `Runnable` 接口,并包含一个 `run` 方法来执行具体的任务。然后,定义了一个 `TaskScheduler` 类,它使用 `ExecutorService` 来管理多个线程。在 `main` 方法中,我们创建了一个 `TaskScheduler` 实例,并提交了10个任务到线程池中执行。最后,调用 `shutdown` 方法来优雅地关闭线程池。