weixin_41335120
weixin_41335120
采纳率81.8%
2018-05-15 04:13 阅读 756

线程安全的一个例子,希望大神回答 谢谢

5

*图片说明
我想问这个例子是不是 线程安全? 有点没怎么看懂, 谢谢啦

题目是说 main() 里面创建一个 全球变量
Holder h;
new Thread( h.assertSanity() );
h = new Holder(42);

所以我想题目应该是说,因为 n 不是 final type, 所以有可能后面右边 data race 更改为了 42, 然后导致exception。 个人感觉应该是这样,不过还是希望大神确认下。谢谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • fly_air 独来独往mk 2018-05-15 04:37

    你这个不知道怎么回答,根据表述是继承了Threand 但是下面第二步是通过线程类直接调用的方法,因此没有用到多线程,也就是说没有现成安全不安全一说,多线程调用的应该是run,结论是安全的

    点赞 评论 复制链接分享
  • qq_37818413 qq_37818413 2018-05-15 05:08

    直接调用的方法,不存在安全不安全

    点赞 评论 复制链接分享
  • qq_39694454 xiaobinsz 2018-05-15 05:51

    应该还算是安全的,这种调用

    点赞 评论 复制链接分享
  • u011606457 _1_1_7_ 2018-05-15 07:37

    线程安全的,有点钻牛角尖 了

    点赞 评论 复制链接分享
  • gatx100 兰博菲德尔 2018-05-15 07:58

    不安全 n 变量应该加上volitate关键字

    点赞 评论 复制链接分享
  • xiahaobo01 xiahaobo01 2018-05-15 09:37

    如果变量n希望每线程独立,那就得使用threadlocal,否则建议使用volitate或AtomicInteger

    点赞 评论 复制链接分享
  • lynn_jiang 毛毛虫3号 2018-05-15 10:26

    应该是线程安全的,这个题目应该是说在该场景下,会出现抛出异常的场景出现吧。但是就是因为抛出异常从而认为是线程安全的吧。

    点赞 评论 复制链接分享

相关推荐