首页 新闻 搜索 专区 学院

多线程查询数据库为什么执行到查询数据库的那一步就跳出了

0
悬赏园豆:5 [已解决问题] 解决于 2018-11-10 21:38

ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize, maximumPoolSizeSize, keepAliveTime, TimeUnit.SECONDS, workQueue
);

    System.setOut(new PrintStream(new BufferedOutputStream(
            new FileOutputStream("E:/charger/sql/out/mixdata1102.txt")), true));


    for (String siteInfo : lines) {
        executor.execute(() -> {
            String[] sites = siteInfo.split(",");
            System.err.println(Thread.currentThread().getName() + " " + sites[0]);
            // todo 按站点id查询数据 不为null的更新
            Site site = siteMapper.selectById(sites[0]);
            })
            }
溢性循环的主页 溢性循环 | 初学一级 | 园豆:164
提问于:2018-11-02 17:40
< >
分享
最佳答案
0

@Test
public void toShow() {
ThreadPoolExecutor executor = new ThreadPoolExecutor(
6, 10, 5, TimeUnit.SECONDS, new SynchronousQueue<>()
);
executor.execute(()->{
System.out.println(goodsDao.selectByOutTradeNo("1").toString());
});
executor.execute(()->{
System.out.println(goodsDao.selectByOutTradeNo("2").toString());
});
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

我上面这段代码输出结果为
Goods{outTradeNo='2', totalAmount='null'}
Goods{outTradeNo='1', totalAmount='null'}

然后你在上边打断点是可以进入方法的,看你的代码块,我觉得问题可能出在你进行多线程查询数据库的时候,这个查询过程是需要时间的,而你主程序本身也是一个线程,当主程序线程结束,就代表你代码执行结束,所以你在主程序加上个延长主程序时间的方法,再测试下看看结果。

收获园豆:5
PottyHarry | 菜鸟二级 |园豆:302 | 2018-11-03 09:06

嗯 解决了

当时应该是数据库没弄好,直接输出语句能看到,查询数据库不行 后来能看到了
数据少的时候能输出,后来多了 durid有扩大了配置,最后,数据多了后 主线程会有阻塞。。 当时应该是数据库链接有问题 感谢回复

溢性循环 | 园豆:164 (初学一级) | 2018-11-10 21:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册