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 12:27:44 浏览: 153
这段代码创建了一个线程池,其中包含2个初始线程,最多可扩展到5个线程。使用ArrayBlockingQueue作为工作队列,大小为4。使用AtomicInteger生成线程名称,并使用ThreadFactory创建新线程。创建了一个ThreadPoolExecutor实例,并将其用于提交10个任务。每个任务都会休眠1秒钟,然后将当前线程的名称和任务号打印到控制台。由于线程池中仅有2个初始线程,因此前2个任务将被立即执行。随着新任务的到来,线程池将创建更多线程。如果任务数量超过了工作队列的大小,那么新任务将被拒绝。在所有任务完成之后,线程池将等待5秒钟,然后关闭所有线程。
相关问题
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
ThreadPoolExecutor 是 Java 中用于管理线程池的类,它实现了 ExecutorService 接口。可以通过创建 ThreadPoolExecutor 对象来创建线程池,并指定线程池的一些基本参数。
其中,corePoolSize 参数表示线程池中核心线程的数量,即始终保持活动的线程数。maximumPoolSize 参数表示线程池中最大线程数,即允许创建的最大线程数量。keepAliveTime 和 unit 参数表示非核心线程空闲时的存活时间和时间单位。workQueue 参数表示用于保存等待执行任务的队列。
通过创建 ThreadPoolExecutor 对象,可以对线程池进行操作,比如提交任务、关闭线程池等。
java中corePoolSize = 1,maximumPoolSize=1,keepAliveTime=0
这三个参数是线程池中的参数,表示:
1. `corePoolSize`:线程池的核心线程数,即线程池中保持的线程数,即使它们处于闲置状态也不会被回收。在这个例子中,`corePoolSize` 设置为 1,表示线程池中只有一个活动线程。
2. `maximumPoolSize`:线程池允许的最大线程数,当线程池中的线程数达到这个数目时,新的任务将会被阻塞。在这个例子中,`maximumPoolSize` 也设置为 1,表示线程池中最多只能有一个线程。
3. `keepAliveTime`:线程空闲后的存活时间,即当线程池中的线程数大于 `corePoolSize` 时,如果一个线程处于空闲状态超过了这个时间,那么它就会被回收。在这个例子中,`keepAliveTime` 设置为 0,表示当线程池中的线程处于空闲状态时,它们将会立即被回收。
综上所述,这个线程池中只有一个活动线程,最多只能有一个线程,空闲线程将会立即被回收。这种线程池适合于执行一些短时间的任务,例如一些简单的计算或者IO操作,但是不适合执行长时间的阻塞任务,因为只有一个线程会被分配给这些任务,任务执行的时间会较长,可能会导致线程池中的任务堆积。
阅读全文