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