`

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); 
} 
}
分享到:
评论

相关推荐

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

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

    Java 4种线程池的使用

     newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。  newFixedThreadPool 创建一个定长线程池,可控制线程大并发数,超出的线程会在队列中...

    线程池demo

    线程池demo:四类线程池的详细使用,newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool, newSingleThreadExecutor

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

    在Android开发中,如果我们要执行某个耗时任务,一般都会考虑开启一个线程去处理。...1 、newCachedThreadPool 这种线程池比较灵活,也就是说它的池里的线程数量并不是固定的,理论上可以无限大,任

    jdk1.5 线程并发与线程池的使用

    整理的一些资料,jdk1.5新增加对线程并发的处理类,可以学习一下

    ThreadsPoolBuilder工具类

    阿里的代码规范中提出,不推荐使用JDK提供的线程池创建方法(newCachedThreadPool、newFixedThreadPool等),因此对ThreadsPoolExecutor方法进行了简单封装,以方便使用。

    【多线程高并发编程】四 java(jdk1.8)五种线程池,你都知道具体的应用场景吗?

    2.实战2.1通过线程池代码创建线程2.1.Executors源码分析newFixedThreadPoolnewWorkStealingPool(int parallelism)newSingleThreadExecutor()newCachedThreadPool()newSingleThreadScheduledExecutor()...

    ThreadPoolBuilder工具类

    阿里的代码规范中提出,不推荐使用JDK提供的线程池创建方法(newCachedThreadPool、newFixedThreadPool等),因此对ThreadPoolExecutor方法进行了简单封装,以方便使用。

    MThread:实现线程池已有的功能,同时对线程池的本身的使用与运行情况提供监控;与ILog组件配合使用,可以实现线程上下文的自动切换

    普通JDK自带的线程池时无法实现线程池的自动切换,基于监控与上下文自动切换的需求,封住了一套taxi开头的线程池,接入方式很简单,它的使用方式与Jdk的使用基本方式一致,只需在对应的类前加一个Taxi,现将对应方式...

    第7章-JUC多线程v1.1.pdf

    ExecutorService newCachedThreadPool = Executors.newScheduledThreadPool(); ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(5); ExecutorService newWorkStealingPool...

    线程学习.docx

    ExecutorService executor = Executors.newCachedThreadPool() 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 • 重用之前的线程 • 适合执行许多短期异步任务...

    Java并发编程(学习笔记).xmind

    newCachedThreadPool(不限规模的线程池) newSingleThreadPool(单线程线程池) newScheduledThreadPool(带延迟/定时的固定长度线程池) 具体如何使用可以查看JDK文档 找出可利用的并行性 ...

    Java线程并发控制基础知识

    线程池  推荐用ThreadPoolExecutor的工厂构造类... * Executors.newCachedThreadPool(),该方法返回的线程池是没有线程上限的,可能会导致过多的内存占用 * 建议使用Executors.newFixedThreadPool(n) *

    Java进阶之ThreadPoolExecutor

     · 使用Executors.newCachedThreadPool()  · 使用Executors.newFixedThreadPool(int)  · 使用Executors.newSingleThreadExecutor()  其中使用2,3,4来创建线程池时,其内部也是通过ThreadPoolExecutor来...

    java-study-code:一个空间,您可以在其中实际地编码与Java开发有关的已学习内容。

    也就是说,ForkJoinPool是ExecutorService的实现,例如newCachedThreadPool或newFixedThreadPool。 基本概念是将大型任务分解为较小的任务单元,在不同的CPU上并行执行,然后汇总结果。 核心技能是一种称为...

    java核心知识点整理.pdf

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM .........................

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

Global site tag (gtag.js) - Google Analytics