请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

headerRemaning 可见性

老师您好,
视频中提到下面的方法添加 synchronized 是为了通用性,可见性, 但是headerRemaining不是已经是volatile了么,为什么还需要添加 synchronized 保证可见性?貌似这里也不存在原子性问题,还是说有别的什么目的?

protected  synchronized boolean isSending(){
    return headerRemaining< Frame.FRAME_HEADER_LENGTH;
}

正在回答 回答被采纳积分+3

2回答

Qiujuer 2019-07-13 10:57:04
protected  synchronized boolean isSending(){
    return headerRemaining< Frame.FRAME_HEADER_LENGTH;
}

其实这里加上,不加应该问题都不大;这里很大程度是为了保证他在读取的时候能读取到修改后的值。因为修改了同步量,所以需要保证可见行;当然你也说了加上了volatile所以可见行不是大问题。

更多的是像你说的,在多线程的情况下如果正在变更时其他线程应该等待变更后再读取到真实值。

这个地方本身存在多线程并发问题,不存在isSending方法竞争,但是isSending方法和上面的更改方法存在竞争;同时存在不同线程访问的等待问题。

看了你的回答是正确的哈。

0 回复 有任何疑惑可以回复我~
提问者 慕九州0077272 2019-07-12 17:39:14

貌似我自己有答案了,应该是为了保证当有线程在处理handle時改變headerRemaining值的時候,保證isSending不被另外的綫程進入直到handle處理完。這樣能保證儅handle剛開始處理的時候,headerRemaining還沒來得及變,但是isSending卻直接返回未開始處理的問題。

老師我說的對麽? 

0 回复 有任何疑惑可以回复我~
  • Qiujuer #1
    对的哈~
    回复 有任何疑惑可以回复我~ 2019-07-13 10:57:18
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号