流年轻描淡写的伤 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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误