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]);
})
}
@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'}
然后你在上边打断点是可以进入方法的,看你的代码块,我觉得问题可能出在你进行多线程查询数据库的时候,这个查询过程是需要时间的,而你主程序本身也是一个线程,当主程序线程结束,就代表你代码执行结束,所以你在主程序加上个延长主程序时间的方法,再测试下看看结果。
嗯 解决了
当时应该是数据库没弄好,直接输出语句能看到,查询数据库不行 后来能看到了
数据少的时候能输出,后来多了 durid有扩大了配置,最后,数据多了后 主线程会有阻塞。。 当时应该是数据库链接有问题 感谢回复