利用多线程进行多核计算
1、利用多线程进行多核计算,利用多核计算提升计算性能。
2、通过CountDownLatch countDownLatch = new CountDownLatch(threadSize);来将多个计算线程结果返回给
主线程进行合并。
3、通过单例来生产固定大小线程池
private static Logger logger = LoggerFactory.getLogger(ThreadTool.class);
private static ThreadTool threadTool;
private ExecutorService executorService;
private ThreadTool(){
NamedThreadFactory threadFactory = new NamedThreadFactory("Gbdt-Thread-", true);
RejectedExecutionHandler handler = new RejectedExecutionHandler() {
private int i = 1;
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
if (i++ % 7 == 0) {
i = 1;
logger.warn("[Gbdt-23002]Task:{} has been reject for ThreadPool exhausted!" +
" pool:{}, active:{}, queue:{}, taskcnt: {}",
new Object[]{
r,
executor.getPoolSize(),
executor.getActiveCount(),
executor.getQueue().size(),
executor.getTaskCount()
});
}
throw new RejectedExecutionException("[Gbdt-23003]Gbdt thread pool of provider has bean exhausted");
}
};
executorService = new ThreadPoolExecutor(20, 500,
60, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(), threadFactory, handler);
}
public static ThreadTool getInstance(){
synchronized (ThreadTool.class) {
if (threadTool == null) { //Double Checked
threadTool = new ThreadTool();
}
}
return threadTool;
}
public ExecutorService getExecutorService(){
return executorService;
}
4、获得线程池并将任务线程添加到线程中。
ExecutorService executorService= threadTool.getExecutorService();
executorService.execute(thread);
5、线程将执行完后将
// 倒数器减1
countDownLatch.countDown();
6、countDownLatch设置等待时间countDownLatch减到0或超时则返回。
try
{
// 阻塞当前线程,直到倒数计数器倒数到0
countDownLatch.await(200, TimeUnit.MILLISECONDS);
}
catch (InterruptedException e)
{
log.error("线程计算异常:"+e.getMessage(),e);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2016-07-12 maven 各种用途