四种:
1. newCachedThreadPool
创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,
那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
2.newScheduledThreadPool
创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。
3.newFixedThreadPool
创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
4. newSingleThreadExecutor
创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。
ExecutorService |
真正的线程池接口。 |
ScheduledExecutorService |
能和Timer/TimerTask类似,解决那些需要任务重复执行的问题。 |
ThreadPoolExecutor |
ExecutorService的默认实现。 |
ScheduledThreadPoolExecutor |
继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的类实现。 |
四种线程池的实现:
1、newCachedThreadPool
创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
/** * 创建一个可缓存的线程池。<br> * 如果线程池的大小超过了处理任务所需要的线程, 那么就会回收部分空闲(60秒不执行任务)的线程,<br> * 当任务数增加时,此线程池又可以智能的添加新线程来处理任务 。<br> * 此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。 */ private static void threadPoolExecutor() { // 创建一个可重用固定线程数的线程池 ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { cachedThreadPool.execute(new MyThread()); } } class MyThread extends Thread { @Override public void run() { try { Thread.sleep(2000); System.out.println(Thread.currentThread().getName() + "running ..."); } catch (InterruptedException e) { e.printStackTrace(); } } }
可以使用jdk自带的 jvisualvm 查看下线程
2、newScheduledThreadPool
创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。
private static void scheduledThreadPoolExecutor() { ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1); exec.scheduleAtFixedRate(new Runnable() {// 每隔一段时间就触发异常 @Override public void run() { System.out.println("-----"); } }, 1000, 5000, TimeUnit.MILLISECONDS); exec.scheduleAtFixedRate(new Runnable() {// 每隔一段时间打印系统时间,证明两者是互不影响的 @Override public void run() { System.out.println(System.nanoTime()); } }, 1000, 2000, TimeUnit.MILLISECONDS); }
3、newFixedThreadPool
创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
private static void fixedThreadPool() { // 创建一个可重用固定线程数的线程池 ExecutorService pool = Executors.newFixedThreadPool(2); // 创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口 for (int i = 0; i < 10; i++) { pool.execute(new MyThread()); } }
4、newSingleThreadExecutor
创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
private static void singleThreadExecutor() { // 创建一个可重用固定线程数的线程池 ExecutorService pool = Executors.newSingleThreadExecutor(); MyThread t1 = new MyThread(); MyThread t2 = new MyThread(); pool.execute(t1); pool.execute(t2); }
相关推荐
Java线程池是Java并发编程中的重要组成部分,它在多线程环境下的资源管理与任务调度方面发挥着关键作用。本资料"Java四种线程池的使用共6页.pdf.zip"详细介绍了Java中四种主要的线程池实现,旨在帮助开发者更有效地...
### Java 四种线程池的详细介绍 #### 1. `newCachedThreadPool`:创建一个可缓存线程池 - **定义与特点**: - `newCachedThreadPool` 创建了一个可缓存线程池,它能够根据当前的处理需求灵活调整线程数量。 - 当...
本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时线程池。 1. **ThreadPoolExecutor**: 这是最基础也是最灵活的线程池实现,可以通过`new ...
Java四种线程池的使用详解 Java四种线程池的使用详解是Java多线程编程中的一种重要概念。Java通过Executors提供四种线程池,分别为newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool和...
简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类
Java的`java.util.concurrent`包中提供了`ExecutorService`的实现类,特别是通过`Executors`工厂类可以方便地创建四种类型的线程池,分别是`newCachedThreadPool`、`newFixedThreadPool`、`newScheduledThreadPool` ...
Java 实现通用线程池 Java 实现通用线程池是指使用 Java 语言编写一个通用的线程池,线程池通俗的描述就是预先创建若干空闲线程,等到需要用多线程去处理事务的时候去唤醒某些空闲线程执行处理任务,这样就省去了...
在Java中,线程池的实现类主要包含以下四种: 1. **`newCachedThreadPool`**: 这种类型的线程池会根据需要创建新线程,并且能够重用已有的线程。如果线程在60秒内没有被使用,那么线程会被终止并从缓存中移除,...
Java线程池是一种高效管理线程资源的方式,它允许开发者预先配置一组线程,以便在需要时复用,而不是每次需要执行任务时都创建新的线程。线程池的顶级接口`Executor`定义了调度任务的基本操作,而实际的线程池实现由...
标题中的“Java实现的线程池、消息队列功能”是指在Java编程中,如何利用编程技术实现线程池和消息队列这两种重要的并发处理机制。线程池和消息队列是解决多线程环境下资源管理和任务调度的有效手段,它们在高并发、...
java 4种线程池.jpg
Java 中的线程池是一种高效的并发编程机制,它可以将任务提交给线程池,并由线程池中的线程执行任务, Java 提供了四种线程池类型,分别是 newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool 和 ...
java线程池是一种高效的并发编程技术,可以帮助开发者更好地管理线程资源,提高系统的性能和可靠性。然而,在使用java线程池时,一个常见的问题是:使用完线程池后到底要不要关闭?本文将通过实例代码和详细解释,...
线程池是一种多线程处理形式,预先创建了若干个线程,当有任务需要执行时,会从线程池中取出一个线程来执行任务,任务执行完毕后,线程返回线程池中等待新的任务。这种机制避免了频繁创建和销毁线程带来的性能开销,...
在Android和Java应用开发中,线程池是一种重要的并发编程工具,它可以帮助我们高效地管理后台任务,提高系统的响应速度和资源利用率。本Demo主要展示了如何在Java或Android环境中使用线程池,以下是对相关知识点的...
本文旨在使用Java语言编写一个通用的线程池。当需要使用线程池处理事务时,只需按照指定规范封装好事务处理对象,然后用已有的线程池对象去自动选择空 闲线程自动调用事务处理对象即可。并实现线程池的动态修改...
"Java 线程池完整代码解析" Java 线程池是 Java 语言中的一个重要概念,它允许开发者创建和管理多个线程,以提高程序的并发性和性能。下面是对给定文件的解析,包括 title、description、标签和部分内容的解析。 ...
Java8并行流中自定义线程池操作示例 Java8并行流中自定义线程池操作示例主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧。 1. 概览 Java8引入了...
Java线程池是一种高效管理线程的技术,它允许开发者预定义一组线程,根据任务的需要灵活调度,而不是每次需要执行任务时都创建新的线程。这种设计模式大大提高了系统的性能,减少了系统资源的消耗,特别是在高并发...
是一个java在进行socket编程时,关于线程池的介绍,有代码和例子