`

newCachedThreadPool线程池

阅读更多
public static ExecutorService newCachedThreadPool()创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。

public static ExecutorService newFixedThreadPool(int nThreads)创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。

新的线程加入后,如果正在运行的线程达到了上限,则会阻塞,直到有了空闲的线程来运行。
import java.util.Random; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.concurrent.TimeUnit; 

/** 
* 线程池newFixedThreadPool的使用。 
* 
*/ 
public class ExecutorTest { 
public static void main(String args[]) { 
Random random = new Random(); 
// 建立一个容量为5的固定尺寸的线程池 
ExecutorService executor = Executors.newFixedThreadPool(5); 
// 判断可是线程池可以结束 
int waitTime = 500; 
for (int i = 0; i < 10; i++) { 
String name = "线程 " + i; 
int time = random.nextInt(1000); 
waitTime += time; 
Runnable runner = new ExecutorThread(name, time); 
System.out.println("增加: " + name + " / " + time); 
executor.execute(runner); 
} 
try { 
Thread.sleep(waitTime); 
executor.shutdown(); 
executor.awaitTermination(waitTime, TimeUnit.MILLISECONDS); 
} catch (InterruptedException ignored) { 
} 
} 
} 

class ExecutorThread implements Runnable { 
private final String name; 
private final int delay; 

public ExecutorThread(String name, int delay) { 
this.name = name; 
this.delay = delay; 
} 

public void run() { 

System.out.println("启动: " + name); 
try { 
Thread.sleep(delay); 
} catch (InterruptedException ignored) { 
} 
System.out.println("完成: " + name); 
} 
}
分享到:
评论

相关推荐

    Android自带的四种线程池使用总结

    newCachedThreadPool 是一种灵活的线程池,它的池里的线程数量并不是固定的,理论上可以无限大。任务不需要排队,如果有空闲的线程,则复用,无则新建线程。这种线程池非常适合需要频繁地执行任务的情况,例如网络...

    线程池管理线程demo

    Java中,我们通常使用`Executors`类提供的静态工厂方法来创建线程池,如`newFixedThreadPool(int nThreads)`创建固定大小的线程池,`newSingleThreadExecutor()`创建只有一个线程的线程池,`newCachedThreadPool()`...

    Java线程池使用说明

    3. newCachedThreadPool():创建一个可缓存的线程池,根据需要创建新线程,空闲线程会在一定时间后被回收。 4. newScheduledThreadPool(int corePoolSize):创建一个支持定时及周期性任务执行的线程池。 在Java中...

    线程池管理多线程上传

    - **创建线程池**:通过`ExecutorService`接口实例化,如`Executors`类提供的`newFixedThreadPool`、`newCachedThreadPool`等静态方法。 - **提交任务**:使用`ExecutorService`的`execute()`方法提交`Runnable`或...

    安卓,线程池的使用 ,封装

    在Android中,通常推荐使用`Executors`静态工厂方法来创建线程池,如`newFixedThreadPool`用于创建固定大小的线程池,`newCachedThreadPool`用于创建缓存线程池等。然而,直接使用这些预定义的线程池可能无法满足...

    四大线程池的用法实例

    Java的`java.util.concurrent`包提供了四种主要的线程池实现:`Executors.newFixedThreadPool()`, `Executors.newSingleThreadExecutor()`, `Executors.newCachedThreadPool()`以及`Executors.newWorkStealingPool()...

    线程池详解:线程池七大核心参数、线程池工作原理、线程池的创建方式、线程池的拒绝策略、如何合理分配线程池大小

    3. newCachedThreadPool:缓存线程池,无核心线程,最大线程数为Integer.MAX_VALUE,空闲线程存活时间为60秒。 4. newScheduledThreadPool:定时线程池,可以实现定时或周期性任务。 四、线程池的拒绝策略 1. ...

    线程池管理源码 java 源码

    线程池是Java多线程编程中...线程池的扩展类`Executors`提供了一些预定义的线程池实现,如单线程池(newSingleThreadExecutor)、定长线程池(newFixedThreadPool)、缓存线程池(newCachedThreadPool)和定时线程池...

    java线程池ThreadPoolExecutor类使用详解.docx

    而线程池不允许使用Executors去创建,而要通过ThreadPoolExecutor方式,这一方面是由于jdk中Executor框架虽然提供了如newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()等创建线程池的方法,...

    Java中的线程与线程池.pptx

    1. newCachedThreadPool:创建一个可缓存线程池,线程空闲超过指定时间后会被回收,当线程池为空时,会新建线程来处理任务。 2. newSingleThreadExecutor:创建一个单线程线程池,所有任务都在一个线程中顺序执行,...

    关于线程池的代码demo

    在Java中,我们可以使用`Executors`工厂类创建线程池,如`newFixedThreadPool`用于创建固定大小的线程池,`newSingleThreadExecutor`创建只有一个线程的线程池,`newCachedThreadPool`创建可缓存的线程池,等等。...

    JAVA经典线程池源码

    - 使用`Executors`工厂类创建线程池,如`newFixedThreadPool`创建固定大小的线程池,`newCachedThreadPool`创建缓存线程池等。 - 提交任务到线程池,通过`ExecutorService`的`execute`方法将`Runnable`或`Callable...

    线程池之ThreadPoolExecutor.docx

    例如,创建一个固定大小的线程池可以使用`Executors.newFixedThreadPool(int nThreads)`,而创建一个按需增长的线程池可以使用`Executors.newCachedThreadPool()`。 线程池的配置需要根据实际应用的需求进行,包括...

    java线程池的使用方式

    - **newCachedThreadPool**:创建一个可根据需要创建新线程的线程池。适用于处理大量短暂的异步任务,线程池会根据需要动态地调整线程数量。 - **newScheduledThreadPool**:创建一个支持定时任务的线程池。适用于...

    线程池的实现(JAVA)

    例如,`newFixedThreadPool(int n)` 创建固定大小的线程池,`newSingleThreadExecutor()` 创建只有一个线程的线程池,`newCachedThreadPool()` 创建可缓存线程的线程池。 线程池的工作流程大致如下: 1. 当一个...

    java 线程池常用方法

    - `newCachedThreadPool()`:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 - `newFixedThreadPool(int nThreads)`:创建固定大小的线程池,线程数量始终保持...

    Java线程池文档

    在实际应用中,通常使用`Executors`工厂类来创建线程池,如`newFixedThreadPool`创建固定大小的线程池,`newCachedThreadPool`创建可缓存的线程池等。然而,对于大规模并发场景,建议直接实例化`ThreadPoolExecutor`...

    JAVA线程池例子

    - `newCachedThreadPool`:可缓存的线程池,会根据需要创建新线程,但空闲线程超过60秒会自动终止。 - `newScheduledThreadPool`:用于定时或延迟执行任务的线程池。 3. **线程池参数详解**: - `corePoolSize`...

    Java几种线程池类型介绍及使用.docx

    Java线程池是一种高效管理线程的机制,它克服了直接使用`new Thread()`创建线程的诸多弊端。创建线程池的主要目的是重用已存在的线程,减少新对象的创建和销毁开销,从而提升程序性能。此外,线程池还可以通过控制...

    Java 线程池的原理与实现

    - **缓存线程池**:`Executors.newCachedThreadPool()`,根据需要动态创建线程,空闲线程超时后会被回收。 - **定长线程池**:`Executors.newScheduledThreadPool(int corePoolSize)`,支持定时及周期性任务执行。...

Global site tag (gtag.js) - Google Analytics