标签:Java.并发编程
CallerRunsPolicy:只用调用者所在线程来运行任务。
DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
DiscardPolicy:不处理,丢弃掉。
当然也可以根据应用场景需要来实现RejectedExecutionHandler接口自定义策略。如记录日志或持久化不能处理的任务。
keepAliveTime(线程活动保持时间):线程池的工作线程空闲后,保持存活的时间。所以如果任务很多,并且每个任务执行的时间比较短,可以调大这个时间,提高线程的利用率。
TimeUnit(线程活动保持时间的单位):可选的单位有天(DAYS),小时(HOURS),分钟(MINUTES),毫秒(MILLISECONDS),微秒(MICROSECONDS, 千分之一毫秒)和毫微秒(NANOSECONDS, 千分之一微秒)。
int righesSize=rights.size(); //获取需要对数据连接的次数
final CountDownLatch countDownLatch=new CountDownLatch(righesSize); //并发工具用于堵塞等待线程执行完成
ExecutorService executorService= Executors.newCachedThreadPool();//使用线程池
int nThreads=Runtime.getRuntime().availableProcessors(); //获取机器的cpu核心数
final Semaphore semp = new Semaphore(nThreads); //限制线程数
for( int i=0;i<righesSize;i++){
final AppRights info=rights.get(i);
Runnable run = new Runnable() { //开始实行线程啦
@Override
public void run() {
try {
// 获取线程池的许可(有空闲线程的时候)
semp.acquire();
} catch (Exception e) {
e.printStackTrace();
}
//业务逻辑处理
// for (AppRights info : rights) { //效率不高
MenuCountVo vo = new MenuCountVo();
vo.setMenuId(info.getMenuId());
int notReadCount = 0;
String menuCode = info.getMenuCode();
try {
switch (menuCode) {
case "notice":
//调用天使
JSONObject json = new JSONObject();
json.put("userCode", userCode);
json.put("source", "sfa");
notReadCount = infomationService.getUnreadInform(json);
break;
case "sfa_store_patrol":
notReadCount = storePatrolService.getNotLeaveStoreNum(userCode);//统计门店巡检未离店记录
break;
case "sfa_store_order_mrg"://统计门店订单的未读数角标,add by Deco 20171012
notReadCount = storeOrderService.getCornerNum(userCode);
break;
}
} catch (Exception e) {
notReadCount = 0;
e.printStackTrace();
}
vo.setNotReadCount(notReadCount);
menuCountList.add(vo);
// 业务逻辑处理完后,释放线程及堵塞
semp.release();
countDownLatch.countDown();
}
};
executorService.execute(run);
}
countDownLatch.await(); //全部执行完成之后就往下执行啦
return new JsonResult(ApiCode.OK, Boolean.TRUE).data("menuCountList", menuCountList);
}
default :new JsonResult(ApiCode.EXCEPTION, Boolean.TRUE);
}
参考资料
Java并发编程实战。
JDK1.8源码。
标签:Java.并发编程
原文地址:http://blog.51cto.com/13666149/2090368