关于list遍历时sychronizedList方法和synchronized同步块的线程安全问题思考
目錄
- 我的難點
- sychronizedList方法無法解決List遍歷時線程不安全問題
- sychronizd同步塊為什么可以解決List遍歷時線程不安全問題
- 我的思考過程
我的難點
sychronizedList方法無法解決List遍歷時線程不安全問題
關于慕課網的socket課程學習中,qiujuer老師在課程中講到:
關于多線程操作時,利用sychronizedList方法解決List內部方法線程不安全問題,但是對于list遍歷仍然會觸發異常。難點*1為什么會觸發異常呢?
sychronizd同步塊為什么可以解決List遍歷時線程不安全問題
接著老師又講到其他解決方案,
在stop()方法內部添加synchronized同步塊。stop()方法中用到了List的遍歷操作。
然后在boradcast(String str)方法名上添加sychronized修飾。方法內部用到了List的遍歷操作。難點*2為什么同步塊可以解決List遍歷時線程不安全問題呢?
我的思考過程
難點*1:為什么會觸發異常呢?
【思路】先看看sychronizedList(List list)是一個什么方法。
點開源碼看看:這個方法支持特定的List返回一個線程安全的List。
【源碼結論】:對于synchronizedList方法返回的List ,對該返回的List進行遍歷時,必須放在同步塊內部。否則可能導致非確定性(non-deterministic)問題。
待考證*1為什么線程安全的一個List,在進行遍歷操作時會觸發線程不安全?
【我的思考】:
非確定性(non-deterministic)問題指什么問題?它和線程不安全有什么關系呢?什么是線程不安全呢?
【我的理解】:
【我的思考】:
源碼講到synchronizedList方法返回的List進行遍歷操作時會有非確定問題,沒有講到線程不安全的問題。
【進一步思考】:
但是,源碼建議這部分遍歷要放到同步塊中,說明synchronized同步塊可以解決這部分的非確定問題,這部分問題主要是指線程不安全問題嗎?同步塊可以解決線程不安全問題嗎?
【我的理解】:
【我的思考】:
synchronizedList方法返回的List就是一個線程安全的list,所以遍歷這個list會破壞了這個返回的list的的線程安全嗎?
【我的理解】:
難點*2為什么同步塊可以解決List遍歷時線程不安全問題呢?
思考:為什么遍歷時線程會不安全呢?
未完待續。
總結
以上是生活随笔為你收集整理的关于list遍历时sychronizedList方法和synchronized同步块的线程安全问题思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: org.apache.ibatis.bi
- 下一篇: 计算机网络作业6,计算机网络作业 6