只有一个工作线程在执行任务。
当提交一个新任务时,如果线程正在运行,新任务就会被放入任务队列中等待执行。
使用场景:适用于需要保证任务顺序执行的应用程序,如任务队列、生产者消费者模型等。
import java.util.concurrent.ExecutorService; ?
import java.util.concurrent.Executors; ?
??
public class SingleThreadExecutorExample { ?
? ? public static void main(String[] args) { ?
? ? ? ? // 创建一个单线程的线程池 ?
? ? ? ? ExecutorService executorService = Executors.newSingleThreadExecutor(); ?
??
? ? ? ? // 提交10个任务给线程池执行 ?
? ? ? ? for (int i = 0; i < 10; i++) { ?
? ? ? ? ? ? Runnable worker = new WorkerThread("" + i); ?
? ? ? ? ? ? executorService.execute(worker); ?
? ? ? ? } ?
??
? ? ? ? // 关闭线程池 ?
? ? ? ? executorService.shutdown(); ?
? ? } ?
} ?
??
class WorkerThread implements Runnable { ?
? ? private String command; ?
??
? ? public WorkerThread(String command) { ?
? ? ? ? this.command = command; ?
? ? } ?
??
? ? @Override ?
? ? public void run() { ?
? ? ? ? System.out.println(Thread.currentThread().getName() + "开始处理:" + command); ?
? ? ? ? processCommand(); ?
? ? ? ? System.out.println(Thread.currentThread().getName() + "结束处理:" + command); ?
? ? } ?
??
? ? private void processCommand() { ?
? ? ? ? try { ?
? ? ? ? ? ? Thread.sleep(2000); ?
? ? ? ? } catch (InterruptedException e) { ?
? ? ? ? ? ? e.printStackTrace(); ?
? ? ? ? } ?
? ? } ?
}
在这个例子中,我们创建了一个单线程的线程池,这意味着所有任务都会顺序执行,一个接一个地执行。因此,这个例子中,任务会按照顺序被执行,每个任务在前一个任务完成后才会开始执行。最后,我们关闭了线程池。需要注意的是,由于只有一个线程可用,如果任务需要长时间运行,可能会导致其他任务等待时间过长。