java 常?的线程池模式CachedThreadPool

发布时间:2024年01月11日


线程池中的线程数量是可变的。
当提交一个新任务时,如果线程池中的线程都在运行,新任务就会被放入任务队列中等待执行。
如果线程池中的所有线程都在运行,且任务队列已满,那么线程池会创建新的线程来处理新任务。
使用场景:适用于执行大量短期任务的应用程序,如网络请求、图片加载等。

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(); ?
? ? ? ? } ?
? ? } ?
}

在这个例子中,我们创建了一个缓存的线程池,大小为无限大。当我们提交任务给线程池时,线程池会根据需要创建新的线程来处理任务。因此,这个例子中,10个任务都会被执行。最后,我们关闭了线程池。需要注意的是,由于线程池的大小是无限的,如果提交的任务过多,可能会导致系统资源耗尽,因此需要谨慎使用。

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