SingleThreadExecutor
是一个单线程的Executor,它使用单个工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。下面是使用SingleThreadExecutor
的实践教程:
步骤 1: 创建SingleThreadExecutor
你可以使用Executors
类提供的newSingleThreadExecutor
方法来创建一个SingleThreadExecutor
。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
ExecutorService executor = Executors.newSingleThreadExecutor();
步骤 2: 创建Runnable任务
接下来,定义你的任务,它应该实现Runnable
接口。
class SimpleTask implements Runnable {
private final String name;
public SimpleTask(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("Executing: " + name + " inside : " + Thread.currentThread().getName());
// 这里可以进行实际的工作
}
}
步骤 3: 提交任务
然后,你可以将任务提交给SingleThreadExecutor
来执行。
executor.execute(new SimpleTask("Task 1"));
executor.execute(new SimpleTask("Task 2"));
executor.execute(new SimpleTask("Task 3"));
由于SingleThreadExecutor
只有一个线程运行任务,这些任务将按照他们添加的顺序逐一执行。
步骤 4: 关闭线程池
在所有任务都提交过后,你应该关闭线程池。你可以使用shutdown()
方法来平缓的关闭执行器,执行器会继续执行之前提交的所有任务。
executor.shutdown();
如果你想立刻关闭执行器,并且取消所有正在进行的任务,你可以使用shutdownNow()
方法。
List<Runnable> notExecutedTasks = executor.shutdownNow();
完整的示例
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SingleThreadExecutorExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new SimpleTask("Task 1"));
executor.execute(new SimpleTask("Task 2"));
executor.execute(new SimpleTask("Task 3"));
executor.shutdown(); // 不再接受新任务,如果已提交的任务将继续执行完
// 如果需要的话,可以在这里等待executor结束,例如使用executor.awaitTermination(...)
}
}
class SimpleTask implements Runnable {
private final String name;
public SimpleTask(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("Executing: " + name + " inside : " + Thread.currentThread().getName());
// 这里可以进行实际的工作
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
这个例子展示了如何创建和使用SingleThreadExecutor
来依次执行三个任务。每个任务都简单地打印出它的名称和正在执行它的线程名称。然后关闭了执行器,以确保程序最终能够正确退出。