最贊回答 / 洋__
呵呵,提問者沒搞懂,大家不要被這個人帶偏了,他才在誤人子弟!估計(jì)提問者是想說內(nèi)存可見了,怎么還會執(zhí)行結(jié)果不一致呢?誰說過保證了內(nèi)存可見性就保證執(zhí)行結(jié)果是一致的??別人是內(nèi)部線程類,視頻里read()操作和write()操作加了synchronized是原子性的,但是又不保證read()和write()哪個先執(zhí)行,所以會出現(xiàn)2個結(jié)果,如果是先read()執(zhí)行,那么result就是0,如果write()先執(zhí)行,那么result就是6。最后老師通過延時保證write()先執(zhí)行,結(jié)果就是只有6。建議多學(xué)習(xí),少抱怨...
最贊回答 / smile_evil
你讓write線程休眠一會。就會出現(xiàn)其他狀況。因?yàn)榇a短執(zhí)行的太快,線程沒有進(jìn)行切換就已經(jīng)執(zhí)行完畢了,所以結(jié)果只有6.
2016-10-04
最新回答 / pythonxx
單線程并且有數(shù)據(jù)依賴關(guān)系
最新回答 / 慕斯0128424
這么跟你解釋:一行java代碼被cpu執(zhí)行的時候執(zhí)行的是若干條cpu指令,synchronized對應(yīng)到cpu執(zhí)行若干條指令,但是volatile也對應(yīng)若干條指令,相同的是他們對應(yīng)的指令有一些相同的,即有重疊,但是又有差異,于是功能有相同也有差異。他們的使用場景也是如此。你現(xiàn)在不適合去理解深沉原理,先學(xué)會用,用對場景。
2016-07-28
已采納回答 / hearain
因?yàn)樯芷诘脑?。方法中的局部變量,方法結(jié)束后這個變量就要釋放掉,final保證這個變量始終指向一個對象。首先,內(nèi)部類和外部類其實(shí)是處于同一個級別,內(nèi)部類不會因?yàn)槎x在方法中就會隨著方法的執(zhí)行完畢而跟隨者被銷毀。問題就來了,如果外部類的方法中的變量不定義final,那么當(dāng)外部類方法執(zhí)行完畢的時候,這個局部變量肯定也就被GC了,然而內(nèi)部類的某個方法還沒有執(zhí)行完,這個時候他所引用的外部變量已經(jīng)找不到了。如果定義為final,Java會將這個變量復(fù)制一份作為成員變量內(nèi)置于內(nèi)部類中,這樣的話,由于final所修...
2016-05-23
已采納回答 / BetterTomorr
1、main線程為主線程, 還有 寫線程 和 讀線程, 可簡單理解為程序中總共有這3個線程(3個線程輪流執(zhí)行, 主線程等待 寫線程 和 讀線程執(zhí)行完畢 最后程序運(yùn)行終止)(主線程的任務(wù)或作用 就是 執(zhí)行main 方法中的代碼指令(即啟動 寫線程 和 讀線程))2、程序分析如下:a、首先 主線程運(yùn)行 , 啟動了 寫線程后 主線程進(jìn)入休眠(此時 因?yàn)橹骶€程休眠了,而 讀線程還沒有啟動(需要主線程來啟動)),? 所以只有/僅有 寫線程 獲取CPU執(zhí)行權(quán),? 因?yàn)閷懢€程本身的任務(wù)簡單,在主線程休眠的1秒時間內(nèi)足夠...
最新回答 / 慕斯0128424
synchronized是java語言特性,join()方法你可以理解為僅僅是Thread類作者提供的一個覺得可能較為通用的工具方法。在B對象的方法中執(zhí)行ThreadA.join()方法,其結(jié)果是在B對象方法調(diào)用處,通過死循環(huán)檢測ThreadA是否死亡(isAlive()方法),如果死亡(理解為ThreadA的run()方法運(yùn)行結(jié)束)則繼續(xù)B對象的方法后續(xù)代碼執(zhí)行。建議閱讀join()方法源碼
2016-02-22
最新回答 / wei嘗不可
引用 @追風(fēng)少年 : ?一般是考慮安全性,對數(shù)據(jù)提供保護(hù),可以通過set方法賦值,再通過get方法取值,這就是java封裝的思想
2016-01-13
已采納回答 / sxian_wang
慢了不就不會刷新了。。。CPU運(yùn)算快的話,在分配的時間片內(nèi)就能完成所有工作:工作內(nèi)從1->主內(nèi)存->工作內(nèi)存2,然后這個線程就釋放CPU時間片,這樣一來就保證了數(shù)據(jù)的可見性。如果是慢了話CPU強(qiáng)行剝奪該線的資源,分配給其它線程,該線程就需要等待CPU下次給該線程分配時間片,如果在這段時間內(nèi)有別的線程訪問共享變量,可見性就沒法保證了。
2015-12-02
最新回答 / qq_可口可樂_4
線程是搶占式執(zhí)行的,sleep意味著當(dāng)前線程在一段時間內(nèi)不執(zhí)行操作,可是該線程的工作內(nèi)存中已經(jīng)得到了number,沒有改變number的值意味著主內(nèi)存中的值也沒有改變,在sleep這段時間內(nèi)其他線程又得到主內(nèi)存中的number,這個number與sleep中的number可能一樣(要是沒有其它線程),這樣的話這2個線程在最終執(zhí)行完之后等于number++只執(zhí)行一次
2015-12-02
最新回答 / 雲(yún)中菩提
首先,你這休眠的是線程 main,并不會影響到synDemo讀寫線程的正常運(yùn)行。而且就算你休眠的是synDemo的寫線程,但只要它拿到了鎖,那么讀線程就會是堵塞狀態(tài),直到寫線程釋放了鎖。最好還是先看看書或關(guān)于線程的博文,對同步,鎖有所了解,然后再來看此視頻。