java 常?的线程池模式FixedThreadPool

2024-01-10 08:40:12

java 常?的线程池模式FixedThreadPool


线程池中的线程数量是固定的。
当提交一个新任务时,如果线程池中的线程都在运行,新任务就会被放入任务队列中等待执行。
如果线程池中的所有线程都在运行,且任务队列已满,那么线程池会创建新的线程来处理新任务。
使用场景:适用于执行大量计算任务的应用程序,如大数据处理、科学计算等。

import java.util.concurrent.ExecutorService; ?
import java.util.concurrent.Executors; ?
??
public class FixedThreadPoolExample { ?
? ? public static void main(String[] args) { ?
? ? ? ? // 创建一个固定大小的线程池,包含5个线程 ?
? ? ? ? ExecutorService executorService = Executors.newFixedThreadPool(5); ?
??
? ? ? ? // 提交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(); ?
? ? ? ? } ?
? ? } ?
}

在这个例子中,我们创建了一个固定大小为5的线程池,并提交了10个任务给线程池执行。由于线程池的大小是固定的,当线程池中的线程都在运行且任务队列已满时,新任务会被拒绝。因此,这个例子中,只有5个任务会被执行,其他任务会被拒绝。最后,我们关闭了线程池。

文章来源:https://blog.csdn.net/weixin_42095178/article/details/135433913
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。