线程池踩了一个坑

new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, new LinkedBlockingDeque<Runnable>());


当线程的个数小于corePoolSize时候,有新任务 则创建线程

当线程的个数等于corePoolSize而队列未满的时候 ,有新任务 就加入队列,当队列满了之后 就再创建新的线程 直到新建的线程数等于maximumPoolSize,再来新任务 的时候 如果corePoolSize、maximumPoolSize、队列都满了 ,那么就会执行线程池的默认策略



在 Java 中,线程池通常用于管理和调度一组线程,提高程序性能并控制资源消耗。当你想让线程池中的线程去调用某个接口时,可以按照以下步骤操作: 1. **创建接口**:首先定义一个公共接口,包含你需要线程执行的具体任务,比如 `Callable`、`Runnable` 或者自定义的接口。 ```java public interface Task { void execute(); } ``` 2. **实现接口**:创建实现了这个接口的类,将具体的业务逻辑放入其中。 ```java public class MyTask implements Task { private String someData; public MyTask(String data) { this.someData = data; } @Override public void execute() { // 执行具体业务逻辑 System.out.println("Running task with data: " + someData); } } ``` 3. **创建线程池**:使用 `Executors` 工厂方法创建一个线程池,如固定大小的 `ThreadPoolExecutor` 或者可缓存的 `newFixedThreadPool`。 ```java ExecutorService executor = Executors.newFixedThreadPool(5); ``` 4. **提交任务到线程池**:通过 `submit()` 方法,将 `Task` 实例提交给线程池处理。线程池会自动管理线程,并在合适的时机执行任务。 ```java executor.submit(new MyTask("Some Data")); ``` 5. **关闭线程池**:当不再需要线程池时,记得调用 `shutdown()` 关闭它,如果有必要,后续可以用 `awaitTermination()` 等待所有任务完成后关闭。 ```java executor.shutdown(); try { if (!executor.awaitTermination(60, TimeUnit.SECONDS)) { executor.shutdownNow(); // 如果在60秒内未完成,则强制停止 } } catch (InterruptedException e) { executor.shutdownNow(); Thread.currentThread().interrupt(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值