线程池中的线程数量是可变的。
当提交一个新任务时,如果线程池中的线程都在运行,新任务就会被放入任务队列中等待执行。
如果线程池中的所有线程都在运行,且任务队列已满,那么线程池会创建新的线程来处理新任务。
使用场景:适用于执行大量短期任务的应用程序,如网络请求、图片加载等。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池,包含5个线程
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交10个任务给线程池执行
for (int i = 0; i < 10; i++) {
Runnable worker = new WorkerThread("" + i);
executorService.execute(worker);
}
// 关闭线程池
executorService.shutdown();
}
}
class WorkerThread implements Runnable {
private String command;
public WorkerThread(String command) {
this.command = command;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "开始处理:" + command);
processCommand();
System.out.println(Thread.currentThread().getName() + "结束处理:" + command);
}
private void processCommand() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在这个例子中,我们创建了一个缓存的线程池,大小为无限大。当我们提交任务给线程池时,线程池会根据需要创建新的线程来处理任务。因此,这个例子中,10个任务都会被执行。最后,我们关闭了线程池。需要注意的是,由于线程池的大小是无限的,如果提交的任务过多,可能会导致系统资源耗尽,因此需要谨慎使用。