这是我的部分代码:
if (bufferList.size() < 500) {
bufferList.add(song);
} else {
synchronized (this) {
try {
// 为了性能,用SpringJDBC
Date date = new Date();
batchInsertSelective(bufferList);
Date date1 = new Date();
System.out.println("[INFO] 线程\t" + Thread.currentThread().getId() + "\t本次插入所花时间:\t" + (date1.getTime() - date.getTime()));
bufferList.clear();
objectCount += bufferList.size();
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
}
}
}
情景:多个线程访问这一段代码,如果缓存List大小大于500就调用batchInsertSelective将数据批量导入数据库,为了测试,我加上了两个时间用来测试insert的时间,并打印。因为加了锁,所以数据库并没有出现重复的问题。但打印的时候问题来了:
[INFO] 线程 57 本次插入所花时间: 1106
[INFO] 线程 89 本次插入所花时间: 0
[INFO] 线程 36 本次插入所花时间: 0
[INFO] 线程 45 本次插入所花时间: 0
[INFO] 线程 76 本次插入所花时间: 0
[INFO] 线程 42 本次插入所花时间: 0
[INFO] 线程 58 本次插入所花时间: 0
[INFO] 线程 86 本次插入所花时间: 0
[INFO] 线程 67 本次插入所花时间: 0
[INFO] 线程 81 本次插入所花时间: 0
[INFO] 线程 64 本次插入所花时间: 0
[INFO] 线程 79 本次插入所花时间: 0
[INFO] 线程 71 本次插入所花时间: 0
[INFO] 线程 88 本次插入所花时间: 0
打印的时候会显示这样(数据库数据没有受到此问题的影响,没有重复值)。
求助大神解答一下。
【求助大佬】关于java并发实际操作中出现的一个问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
相关推荐 更多相似问题
点击登录
提问题
悬赏问题
- ¥20 python跨服务器实现复制 ,剪切的功能需求
- ¥15 R语言,单因素cox检验,时间分层后,使用coz.zph()函数再次ph假设检验时报错,如何解决?
- ¥15 关于#C语言冒泡排序型#的问题,如何解决?
- ¥15 如何预处理存在负值的样本数据,使其能够全都成为正的
- ¥15 SW画图拖影,平滑处理如何关闭
- ¥15 请问怎么通过css改变图片颜色
- ¥15 c语言文件读取到结构体以及写入
- ¥15 Blender: auto rig pro骨骼动画导出后变形穿模
- ¥15 C51单片机的设计思路哈
- ¥15 Linux脏牛提权漏洞