`
id.alex
  • 浏览: 22087 次
社区版块
存档分类
最新评论

Executors.newCachedThreadPool 线程重用

    博客分类:
  • Java
阅读更多
想起一个小细节:

线程池 CachedThreadPool  的说明.
引用

public static ExecutorService newCachedThreadPool()
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们.............


但这个与 Thread 类的 start 方法 说明有些冲突
多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。 


例如:
// T 是一个 Thread 的实现类
T t = new T();
t.start();
t.start();


会抛出  java.lang.IllegalThreadStateException

但下面这样就没问题..
T t = new T();
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
newCachedThreadPool.submit(t);
newCachedThreadPool.submit(t);


猜测线程池其实不是直接调用了 t.start(), 后来也证明了猜测. 线程池有一个 defaultThreadFactory , 实际也是每次 new 出来一个新的线程.
ThreadFactory tf = Executors.defaultThreadFactory();
for (int i = 0; i < 10; i++) {
	Thread tft = tf.newThread(t);
	tft.start();
}


以前一直没注意到这个细节.今天特意看一下. 仅仅如此...


分享到:
评论

相关推荐

    线程学习.docx

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

    thrift服务端和客户端实现Nifty.zip

    ExecutorService workerExecutor = Executors.newCachedThreadPool(); // Start the server server.start(bossExecutor, workerExecutor); // Arrange to stop the server at shutdown Runtime.getRuntime()....

    C++ library for executors.zip

    C++ library for executors

    rxlib:一组用于Java的实用程序

    ThreadPool-最佳线程数@SneakyThrows@Testpublic void threadPool() { // Executors.newCachedThreadPool(); 没有queue缓冲,一直new thread执行,当cpu负载高时加上更多线程上下文切换损耗,性能会急速下降。 // ...

    Java线程并发控制基础知识

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

    Java进阶之ThreadPoolExecutor

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

    netty-servlet-bridge:netty实现servlet协议架构

    该项目为 Netty.IO 框架( )提供了一个 Servlet API 实现。... newCachedThreadPool(), Executors . newCachedThreadPool() ) ); // configure web-app WebappConfiguration webapp = new WebappConfi

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

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

    Java多线程Executors批量执行数据实现限流

    Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...

    java 线程池管理类:Executors_.docx

    java 线程池管理类:Executors_.docx

    线程-线程池-锁-集合-Map-队列.docx

    线程是系统中可执行调度的最小单位。线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,规避资源耗尽的风险。集合的详细描述,以及集合中的异同点,HashMap不同jdk版本区别,...

    Java开发手册(阿里巴巴带-alibaba-IDE插件)

    《阿里巴巴Java开发手册》是阿里内部Java工程师所遵循的开发规范,涵盖编程规约、单元测试规约、异常日志规约、MySQL规约、工程规约、安全规约等,这是近万名阿里Java技术精英的经验总结,并经历了多次大规模一线...

    Thread_Testing:测试项目针对不同的线程执行模式

    Thread_Testing测试Multi-Thread执行方法1.ThreadPoolExecutor: 以当前device为online的核心数量来初始化Thread Pool大小2.Executors.newCachedThreadPool() 未指定Thread Pool大小预设实作上为0, Pool Size为...

    银行业务调度系统

    Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { public void run() { Integer number = NumberMachine.getInstance().getCommonManager().generateNewManager(); System.out....

    Executor,Executors,ExecutorService比较.docx

    Executors: 是java.util.concurrent包下的一个类,提供了若干个静态方法,用于生成不同类型的线程池。Executors一共可以创建下面这四类线程池: 1.newFixedThreadPool创建一个可缓存线程池,如果线程池长度超过...

    Firebase-Cloud-Messaging-Java-Client:使用JAX-RS客户端的Java FCM客户端库

    private static final ExecutorService EXECUTOR = Executors.newCachedThreadPool();//Asynchronusly send notificationpublic static Future&lt;Response&gt; sendLoginNotification(String token, String message) { ...

    tcp_thread_java.zip_Java 线程池_java TCP线程

    java简单线程池的实现,使用jdk的Executors.newFixedThreadPool方法来实现固定大小线程池

    Java和C#之间SOCKET通信的问题

    ExecutorService exec = Executors.newCachedThreadPool(); try { ServerSocket server=new ServerSocket(5678); int i = 1; while(true) { MyLogManager.InfoLog(log, null,"等待连接第"+i+"个用户…"); ...

    java面试题_多线程(68题).pdf

    1. 什么是线程? 2. 什么是线程安全和线程不安全? 3. 什么是⾃旋锁? 4. 什么是CAS?...8. 什么是Executors框架? 9. 什么是阻塞队列?如何使⽤阻塞队列来实现⽣产者-消费者模型? 10. 什么是Callable和Future?

    java-long-stacktrace:长堆栈跟踪实现示例

    ExecutorService executorService = Executors . newCachedThreadPool(); executor = new LongStackTraceExecutor (executorService); CompletableFuture . runAsync(() - &gt; { CompletableFuture . runAsync(() ...

Global site tag (gtag.js) - Google Analytics