import java.util.concurrent.*;
public class ThreadPoolRejectPolicyExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池,线程池大小为2
ThreadPoolExecutor executor = new ThreadPoolExecutor(
2, 2, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1), // 队列容量为1
new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
// 提交4个任务给线程池
for (int i = 1; i <= 4; i++) {
int taskId = i;
executor.submit(() -> {
System.out.println("Executing Task " + taskId + " by " + Thread.currentThread().getName());
try {
Thread.sleep(2000); // 模拟任务执行时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + taskId + " completed");
});
}
// 关闭线程池
executor.shutdown();
}
}
CallerRunsPolicy作为拒绝策略。当线程池和队列都已满时,新的任务将由调用线程(即提交任务的线程)来执行,这可能会降低系统的吞吐量,但可以避免任务被丢弃。如果你需要其他类型的拒绝策略(如AbortPolicy、DiscardPolicy或DiscardOldestPolicy),可以替换new ThreadPoolExecutor.CallerRunsPolicy()部分。
上一篇:java获取服务器ip和端口号
下一篇:java线程池原理
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站