反正CPU闲着也是闲着 2017-11-19 13:54 采纳率: 100%
浏览 868
已采纳

【求助大佬】关于java并发实际操作中出现的一个问题

这是我的部分代码:
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
打印的时候会显示这样(数据库数据没有受到此问题的影响,没有重复值)。
求助大神解答一下。

  • 写回答

2条回答 默认 最新

  • COCO_AS 2017-11-19 14:48
    关注

    不要用 Date, 用Java.lang.System.currentTimeMillis()

    Date精确到秒, 用毫秒

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 SQL server表计算问题
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出