亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號