int corePoolSize = 2; int maxPoolSize = 5; long keepAliveSeconds = 5; BlockingQueue workQueue = new ArrayBlockingQueue(4); AtomicInteger threadId = new AtomicInteger(1); ThreadFactory factory = runnable -> new Thread(runnable, "thread-" + threadId.getAndIncrement()); ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveSeconds, TimeUnit.SECONDS, workQueue, factory); for (int i= 0 ; i< 10 ; i++ ) { int finalI = i; executor.submit(() -> { try { Thread.sleep(1000); } catch (InterruptedException ignored) { } System.out.println(Thread.currentThread().getName() + ":" + i); }); }
时间: 2024-02-15 15:27:44 浏览: 146
threadpool_leather5mg_rocket38x_工作线程的完整代码_完成演示线程池管理者_线程池演示代码_
这段代码创建了一个线程池,其中包含2个初始线程,最多可扩展到5个线程。使用ArrayBlockingQueue作为工作队列,大小为4。使用AtomicInteger生成线程名称,并使用ThreadFactory创建新线程。创建了一个ThreadPoolExecutor实例,并将其用于提交10个任务。每个任务都会休眠1秒钟,然后将当前线程的名称和任务号打印到控制台。由于线程池中仅有2个初始线程,因此前2个任务将被立即执行。随着新任务的到来,线程池将创建更多线程。如果任务数量超过了工作队列的大小,那么新任务将被拒绝。在所有任务完成之后,线程池将等待5秒钟,然后关闭所有线程。
阅读全文