想起一个小细节:
线程池 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();
}
以前一直没注意到这个细节.今天特意看一下. 仅仅如此...
分享到:
相关推荐
ExecutorService executor = Executors.newCachedThreadPool() 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 • 重用之前的线程 • 适合执行许多短期异步任务...
ExecutorService workerExecutor = Executors.newCachedThreadPool(); // Start the server server.start(bossExecutor, workerExecutor); // Arrange to stop the server at shutdown Runtime.getRuntime()....
C++ library for executors
ThreadPool-最佳线程数@SneakyThrows@Testpublic void threadPool() { // Executors.newCachedThreadPool(); 没有queue缓冲,一直new thread执行,当cpu负载高时加上更多线程上下文切换损耗,性能会急速下降。 // ...
线程池 推荐用ThreadPoolExecutor的工厂构造类... * Executors.newCachedThreadPool(),该方法返回的线程池是没有线程上限的,可能会导致过多的内存占用 * 建议使用Executors.newFixedThreadPool(n) *
· 使用Executors.newCachedThreadPool() · 使用Executors.newFixedThreadPool(int) · 使用Executors.newSingleThreadExecutor() 其中使用2,3,4来创建线程池时,其内部也是通过ThreadPoolExecutor来...
该项目为 Netty.IO 框架( )提供了一个 Servlet API 实现。... newCachedThreadPool(), Executors . newCachedThreadPool() ) ); // configure web-app WebappConfiguration webapp = new WebappConfi
ExecutorService newCachedThreadPool = Executors.newScheduledThreadPool(); ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(5); ExecutorService newWorkStealingPool...
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...
java 线程池管理类:Executors_.docx
线程是系统中可执行调度的最小单位。线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,规避资源耗尽的风险。集合的详细描述,以及集合中的异同点,HashMap不同jdk版本区别,...
《阿里巴巴Java开发手册》是阿里内部Java工程师所遵循的开发规范,涵盖编程规约、单元测试规约、异常日志规约、MySQL规约、工程规约、安全规约等,这是近万名阿里Java技术精英的经验总结,并经历了多次大规模一线...
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....
Executors: 是java.util.concurrent包下的一个类,提供了若干个静态方法,用于生成不同类型的线程池。Executors一共可以创建下面这四类线程池: 1.newFixedThreadPool创建一个可缓存线程池,如果线程池长度超过...
private static final ExecutorService EXECUTOR = Executors.newCachedThreadPool();//Asynchronusly send notificationpublic static Future<Response> sendLoginNotification(String token, String message) { ...
java简单线程池的实现,使用jdk的Executors.newFixedThreadPool方法来实现固定大小线程池
ExecutorService exec = Executors.newCachedThreadPool(); try { ServerSocket server=new ServerSocket(5678); int i = 1; while(true) { MyLogManager.InfoLog(log, null,"等待连接第"+i+"个用户…"); ...
1. 什么是线程? 2. 什么是线程安全和线程不安全? 3. 什么是⾃旋锁? 4. 什么是CAS?...8. 什么是Executors框架? 9. 什么是阻塞队列?如何使⽤阻塞队列来实现⽣产者-消费者模型? 10. 什么是Callable和Future?
ExecutorService executorService = Executors . newCachedThreadPool(); executor = new LongStackTraceExecutor (executorService); CompletableFuture . runAsync(() - > { CompletableFuture . runAsync(() ...