多线程是近代互联网兴起的一种编程技术,能够极大的提升运行效率,本篇文章我们就来了解些常见多线程编程题。
示例:
//多线程查询 //定义异步计数器 管理一共多少个线程 CountDownLatch latch = new CountDownLatch(dates.length); //接受返回的结果 Map resultListMap = new HashMap(); //线程池管理类(核心线程数,最大线程数,超过核心线程数的空闲线程最大存活时间,时间单位,阻塞任务队列) ThreadPoolExecutor exce = new ThreadPoolExecutor(200, 150000, 1, TimeUnit.NANOSECONDS, new SynchronousQueue < Runnable > ()); //for循环多条异步查询 for (int i = 0; i < dates.length; i++) { //设置参数 Map paramNew = new HashMap(); String beginDate = dates[i].split(",")[0]; //开始时间 String endDate = dates[i].split(",")[1]; //结束时间 paramsMap.put("beginDate", beginDate.replace("-", "")); paramsMap.put("endDate", endDate.replace("-", "")); paramsMap.put(objIdKey, objId); if (!"0".equals(bodyTypeId)) { paramsMap.put("bodyTypeId", bodyTypeId); } paramNew.putAll(paramsMap); paramNew.put("selectType", "query"); try { exce.execute(new Worker(latch, paramNew, resultListMap, dao, i)); } catch (Exception e) { e.printStackTrace(); } } exce.shutdown(); try { //线程阻塞,等待所有线程完成才继续执行下面的代码 latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("=================over================"); //拿到查询结果挨个做处理 for (int i = 0; i < dates.length; i++) { //参数设置 String beginDate = dates[i].split(",")[0]; //开始时间 String endDate = dates[i].split(",")[1]; //结束时间 String legend = beginDate.substring(0, 4); //图例 paramsMap.put("beginDate", beginDate.replace("-", "")); paramsMap.put("endDate", endDate.replace("-", "")); paramsMap.put(objIdKey, objId); if (!"0".equals(bodyTypeId)) { paramsMap.put("bodyTypeId", bodyTypeId); } //把查询结果按顺序拿出来 List < PriceIndexEntity > list = new ArrayList < PriceIndexEntity > (); //成交价维度新算法 list = (List < PriceIndexEntity > ) resultListMap.get(i); //对list处理 ...... } /***内部类Worker***/ static public class Worker extends Thread { //定义异步计数器 管理一共多少个线程 private CountDownLatch latch; //参数 private Map param; //要返回的结果集 private Map resultListMap; //重新给一个dao private IPriceIndexDao dao; //排序字段 private int i; public Worker(CountDownLatch latch, Map param, Map resultListMap, IPriceIndexDao dao, int i) { super(); this.latch = latch; this.param = param; this.resultListMap = resultListMap; this.dao = dao; this.i = i; } @Override public void run() { try { List list = null; if ("export".equals(param.get("selectType"))) { if (param.get("priceType") .equals("1")) { list = dao.exportPriceIndexOriginalTpData(param); } else { list = dao.exportPriceIndexOriginalMsrpData(param); } } else { if (param.get("priceType") .equals("1")) { list = dao.getPriceIndexAnalysTpData(param); } else { list = dao.getPriceIndexAnalysMsrpData(param); } } resultListMap.put(i, list); //当前线程执行完 计数器-1 latch.countDown(); } catch (Exception e) { e.printStackTrace(); } } }
以上就是本篇文章的所有内容,还需要了解一些其他的java经典实例题的话就请持续关注我们网站吧。
推荐阅读: