多线程是近代互联网兴起的一种编程技术,能够极大的提升运行效率,本篇文章我们就来了解些常见多线程编程题。
示例:
//多线程查询
//定义异步计数器 管理一共多少个线程
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经典实例题的话就请持续关注我们网站吧。
推荐阅读: