本人小白 对多线程这块 不是很理解
现在有一个集合 集合里面就十条企业数据 我需要用多线程处理 这个十个数据 来跑一个规则引擎 跑这个方法的参数就是一条企业数据
我怎么用多线程 用十个线程 让每个线程跑一条数据 同时进行 求大神 啊 给写个小demo 或者有相似的案例 跪求!!!
现在有一个集合 集合里面就十条企业数据 我需要用多线程处理 这个十个数据 来跑一个规则引擎 跑这个方法的参数就是一条企业数据
我怎么用多线程 用十个线程 让每个线程跑一条数据 同时进行 求大神 啊 给写个小demo 或者有相似的案例 跪求!!!
解决方案 »
- struts1求助:在如何指定在action中执行的方法
- jspsmartupload Unable to upload 都找了三天没找到错误
- 大家对这个问题有什么好点子么?(客户要能自定义界面)
- java 2次开发,怎么部署。。
- 初始使用WEBLOGIC在TOMCAT下可以运行的WAR在WEBLOGIC下报错,帮我看下到底是说明错
- spring3.2.3 mybatis3 整合问题 出现错误
- 大家都来说说:用J2EE架构的系统,WINDOWS下开发,之后可能要转到UINIX下或LINUX下运行,开发过程中该注意哪些问题?
- 高人进
- java下载乱码问题
- hibernate连接数据库出现问题
- applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.
- 求助,在服务器上tomcat里面运行,报错的具体信息如下
List<Object> list = new ArrayList<Object>(10000);
int index = 0;
ExecutorService ex = Executors.newFixedThreadPool(5);
int dealSize = 2000;
List<Future<List<Object>>> futures = new ArrayList<>(5);
//分配
for(int i=0;i<5;i++,index+=dealSize){
int start = index;
if(start>=list.size()) break;
int end = start + dealSize;
end = end>list.size() ? list.size() : end;
futures.add(ex.submit(new Task(list,start,end)));
}
try {
//处理
List<Object> result = new ArrayList<>();
for(Future<List<Object>> future : futures){
//合并操作
result.addAll(future.get());
}
} catch (Exception e) {
e.printStackTrace();
}
}
private class Task implements Callable<List<Object>>{
private List<Object> list;
private int start;
private int end;
public Task(List<Object> list,int start,int end){
this.list = list;
this.start = start;
this.end = end;
}
@Override
public List<Object> call() throws Exception {
Object obj = null;
List<Object> retList = new ArrayList<Object>();
for(int i=start;i<end;i++){
obj = list.get(i);
//你的处理逻辑
}
//返回处理结果
return retList;
}
}
public class Test {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// ForkJoinPool pool = new ForkJoinPool();
List<String> entList = new ArrayList<>();
entList.add("A61B4A66D95D4680AAB57EFBA4EF6460");
entList.add("C2AE7888553348B6A783A8F516EFF83D");
entList.add("DA27C8F9A2B64B6B8939E4619CF2CD81");
entList.add("5273FFC7233A49F5A065271A1A5F6A0F");
entList.add("9E9CD32BC841498DAA15E56197235B67");
entList.add("7A2564018D4B45C4899CF31F0FB67554");
entList.add("D3D267CCAE4942BEB7F6047D56217D79");
entList.add("1E3AF2A33C154943A40058B2C8EDF6A6");
entList.add("D0BBF3F1EC9143EA95A0547131E5985B");
entList.add("15A1983C7ECE477ABDB72A890D937B11"); int index = 0;
ExecutorService ex = Executors.newFixedThreadPool(10);
int dealSize = 1;
List<Future<List<ValidateMsg>>> futures = new ArrayList<>(); for (int i = 0; i < 10; i++, index += dealSize) {
int start = index;
if (start >= entList.size()) {
break;
}
int end = start + dealSize;
end = end > entList.size() ? entList.size() : end;
futures.add(ex.submit(new MyTask(entList, start, end)));
}
ex.shutdown();
// List<Object> result = new ArrayList<>();
for (Future<List<ValidateMsg>> future : futures) {
List<ValidateMsg> list = future.get();
for (int i = 0; i < list.size(); i++) {
ValidateMsg validateMsg = list.get(i);
System.out.println(validateMsg.getRuleMsg());
}
} }
}
public class MyTask implements Callable<List<ValidateMsg>> { private List<String> entList;
private int start;
private int end; public MyTask(List<String> entList, int start, int end) {
this.entList = entList;
this.start = start;
this.end = end;
} @Override
public List<ValidateMsg> call() throws Exception {
String entId = null;
List<ValidateMsg> retList = new ArrayList<>();
for (int i = start; i < end; i++) {
entId = entList.get(i);
Map<String, Object> params = new HashMap<String, Object>();
params.put("entId", entId);
ValidateMsg runApp = RuleUtil.runApp("regitem", params);
// String result = runApp.getResult();
// System.out.println(result);
retList.add(runApp);
}
return retList;
}}
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor executor = new ThreadPoolExecutor(8, 8, 3, TimeUnit.SECONDS, queue, new ThreadPoolExecutor.DiscardPolicy());然后建立一个处理数据的类,比如:
public class Handle implements Runnable然后这样去执行就OK啦,简单
Handle handle = new Handle()
executor.execute(thread);