public class ThreadPool {
private final java.util.concurrent.ThreadPoolExecutor executor;
public ThreadPool(String name, int corePoolSize, int maximumPoolSize, long keepAliveTime, java.util.concurrent.TimeUnit unit) {
executor = new java.util.concurrent.ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
unit,
new java.util.concurrent.LinkedBlockingDeque<>(),
new CustomThreadFactory(name),
new java.util.concurrent.ThreadPoolExecutor.AbortPolicy()
);
}
public void execute(java.lang.Runnable command) {
executor.execute(command);
}
public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T> task) {
return executor.submit(task);
}
public void shutdown() {
executor.shutdown();
}
}
上述代码封装了一个ThreadPool类,包含创建线程池、执行任务、提交有返回值的任务和关闭线程池的方法
使用
创建好线程池后,可利用其执行任务,常见的有execute()和submit()两种方法:
-
execute()方法:用于执行不需要返回值的任务(不可以取消任务)。示例如下:
ThreadPool threadPool = new ThreadPool("myThreadPool", 5, 10, 60, java.util.concurrent.TimeUnit.SECONDS); threadPool.execute(() -> { System.out.println("执行任务"); }); -
submit()方法:用于执行有返回值的任务,返回一个
Future对象(可以取消任务),可通过该对象获取任务的执行结果。示例如下:ThreadPool threadPool = new ThreadPool("myThreadPool", 5, 10, 60, java.util.concurrent.TimeUnit.SECONDS); java.util.concurrent.Future<Integer> future = threadPool.submit(() -> { return 1 + 1; }); try { Integer result = future.get(); System.out.println("任务执行结果:" + result); } catch (java.util.concurrent.ExecutionException | InterruptedException e) { e.printStackTrace(); }在使用线程池时,还需考虑拒绝策略和生命周期管理。当线程池无法接受新任务时,会触发拒绝策略,Java 提供了几种内置的拒绝策略实现,如
AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy,也可以自定义拒绝策略。同时,在程序结束时,应调用shutdown()方法优雅关闭线程池,避免任务丢失或线程泄漏
可以考虑封装成单例
1203

被折叠的 条评论
为什么被折叠?



