流年轻描淡写的伤 2017-05-16 15:11 采纳率: 33.3%
浏览 4142

多线程访问数据库 spring+mybatis

private Service service; //spring注解出来的service层
private Dao;//sping注解出来的dao层
线程池初始化
ThreadPoolExecutor executor = ThreadPool.getThreadPool(5,8, 3000, TimeUnit.SECONDS, new LinkedBlockingQueue(2000));
//得到线程池中线程队列
LinkedBlockingQueue queue = (LinkedBlockingQueue) executor.getQueue();
int countTool= conList.size();
final CountDownLatch countDownLatch = new CountDownLatch(countTool);
for(int i=0;i < countTool;i++){
final Map tempMap = (Map) conList.get(i);
final Map params = new HashMap(); //传的参数
params.put("aaa",tempMap.get("aaa"));
//向线程池 放入待处理的任务信息 使用内部类进行 查询
executor.execute(new Runnable(){
public void run() {

try {
//这里调用sevice里的方法时,params的值在service层获取的都是同一个值,
//按理来说各个线程之间是没有关联的呀,
//我有打印mybati的创建connection的日志,每一个查询方法都会create a new sqlSession,为什么参数最后传进去就是一样的了呢,
Map result =service.getResult(params); //service里的方法主要是对参数进行一些处理,然后去数据库查数据
Clob clob = (Clob)result.get("clob");
//下面要把clob字段转成string,系统也会报错,为关闭的链接,
//要怎么解决啊,是和线程安全有关吗,还是我写的有错误
} catch (SQLException e) {
e.printStackTrace();
}
//线程计数器 减 1
countDownLatch.countDown();
}

});
}
//所有子线程 执行完成之后 主线程再继续向下
countDownLatch.await();
System.out.println("-------------query end------");

  • 写回答

1条回答

  • devmiao 2017-05-16 17:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站