android多線程實(shí)現(xiàn)方式 怎樣在Android面試中聊聊多線程?
怎樣在Android面試中聊聊多線程?系統(tǒng)應(yīng)回答:1。線程的四種狀態(tài),新的,可運(yùn)行的,死的,阻塞的。2等待,睡眠,連接和線程的產(chǎn)量。三。例如wait、notify和notifyAll。4枚舉方法:調(diào)用
怎樣在Android面試中聊聊多線程?
系統(tǒng)應(yīng)回答:1。線程的四種狀態(tài),新的,可運(yùn)行的,死的,阻塞的。2等待,睡眠,連接和線程的產(chǎn)量。三。例如wait、notify和notifyAll。4枚舉方法:調(diào)用表、future和futuretask。5、線程池。6消息機(jī)制:處理程序、循環(huán)器和消息隊(duì)列的執(zhí)行原理。7,任務(wù)。
多個(gè)線程可以讀一個(gè)變量,只有一個(gè)線程可以對(duì)這個(gè)變量進(jìn)行寫,到底要不要加鎖?
下面簡(jiǎn)要說(shuō)明以下原因:
鎖定是因?yàn)椴僮鞑皇窃拥?。讓我們用操作一?lái)解釋它??聪旅鎯蓚€(gè)圖。
我這個(gè)操作需要
看上面的第二個(gè)圖,你能很清楚地理解這個(gè)過(guò)程嗎?
鎖定是為了確保上述三個(gè)步驟是原子操作。
回到問(wèn)題上來(lái),只有一個(gè)線程要寫,沒(méi)有競(jìng)爭(zhēng),所以不需要鎖定。
但是,如果你看第一張圖片,因?yàn)橹鲀?nèi)存和本地內(nèi)存的存在
在一個(gè)線程寫入后,其他線程無(wú)法立即看到它。這就是可見(jiàn)性問(wèn)題。
添加volatile關(guān)鍵字后,它將在操作后強(qiáng)制工作內(nèi)存和主內(nèi)存同步,以確保其他線程可以立即看到它。