为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中分配 List 是线程安全的吗?

在 Java 中分配 List 是线程安全的吗?

一只甜甜圈 2022-07-06 19:06:08
我搜索并发现分配对象是线程安全的(long、double 类型除外)我想确认以下代码是线程安全的。class SharedAnyClass { public static volatile obj = new ArrayList();}class Writer {  // thread 1  void run() {     List temp = new ArrayList();     temp.add(xx);     SharedAnyClass.obj= temp;  // assign object in thread 1  }}class Reader {  void run() {    List temp = SharedAnyClass.obj;    for ( int i=0;i<temp.length(); i++ ) {       temp.get(xx)... // read object in thread 2    }       }}据我所知,当 Reader 在 for 循环中读取共享 List 时,Writer 线程可以在线程安全中分配共享 List。在这种情况下,Reader 线程仍然可以使用旧的共享 List 对象在 for 循环中读取共享 List。当 Reader 线程稍后尝试执行 run() 函数时,它将读取新的共享 List 对象。这样对吗?
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

这段代码是错误的。线

List temp = SharedAnyClass.obj;

可以在分配之前发生

 SharedAnyClass.obj= temp;  // assign object in thread 1

所以会读取初始的空列表。


查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信