求线程池案例(ThreadPoolExecutor)

源者鬼道 2019-09-19 09:46:58
如何非常好的理解线程池(ThreadPoolExecutor)的用法,有相关的代码案例吗?工作实用类型的最好--非常感谢
...全文
203 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
瘦死的黑骆驼 2019-09-23
  • 打赏
  • 举报
回复

// 初始化线程池,边界为当前电脑cpu核数+1
ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
threadPool.execute(new Thread(new Runnable(){}));
看到没,其实线程池的使用很简单,java已经提供了几种线程池的实现方式,然后扔进去线程就可以执行了,上边是一个有边界的线程池,线程池初始化之后,如果没有执行execute的话里面的线程数是0,执行过之后才会有值,知道达到边界值。
  • 打赏
  • 举报
回复
线程池很少有通用的,需要自己根据自己的环境配置(cpu) 如果多线程操作的是同一资源,那么提高性能的同时,也需要 选择合适的同步操作,同步操作的设置方式,要根据程序的执行时间来配置
s478853630 2019-09-21
  • 打赏
  • 举报
回复
随便写了一点代码,希望能帮助到你:

package com.test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.mvc.listener.ThreadListener;
import org.apache.commons.mvc.thread.ExecuteThread;
import org.apache.commons.mvc.thread.MoreThread;

public class Test {

public static void main(String[] args) {
List<ThreadListener> list = new ArrayList<ThreadListener>();
for (int i = 0; i < 10; i++) {
list.add(new ThreadImpl());
}
List<Object> result = MoreThread.run(list, null);
System.out.println(result);
}

private static class ThreadImpl implements ThreadListener {

@Override
public Object run(int index) throws Exception {
System.out.println("第" + index + "个线程跑过了");
return index * index;// 返回一个平方数
}

@Override
public void finish(Date startTime, int overCount) {
// 单个线程完成之后
}

@Override
public void blackout(int index, Exception e, ExecuteThread thread, List<ExecuteThread> threads) {
// 单个线程执行失败
}

}

}

运行结果:

第0个线程跑过了
第4个线程跑过了
第3个线程跑过了
第2个线程跑过了
第1个线程跑过了
第6个线程跑过了
第5个线程跑过了
第8个线程跑过了
第9个线程跑过了
第7个线程跑过了
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


小结:
线程池+多线程的优点就是加快运行速度
假如一次跑10条SQL,每条耗时1秒钟
如果用单线程,10秒钟是省不掉的
如果用多线程,1秒多点就可以了
这是串行和并行的主要区别

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧