开发者社区> 问答> 正文

一段java并发同步代码的疑惑

screenshot
这段代码为何把getId()函数放到TaskCall内部,却会得到同步失败的输出(2 2 3或者3 3 3等),这是为什么呢?

展开
收起
蛮大人123 2016-02-27 14:36:31 2136 0
2 条回答
写回答
取消 提交回答
  • TaskCall每个线程一个实例,getId放到TaskCall里,则synchronized修饰符是获取taskCall实例的锁,因有3个实例所以有出现上述情况

    2019-07-17 18:48:51
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    因为放到TaskCall里之后,synchronized表示在一个TaskCall实例上同步执行。有3个实例,它们之间是不同步的。而放在外面是在一个CachedThreadPool中同步。

    2019-07-17 18:48:51
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载