卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

android handler怎么切換線程 面試:Handler的工作原理是怎樣的?

面試:Handler的工作原理是怎樣的?Handler機(jī)制工作原理:Handler工作流程基本上除開Handler、Looper、Message、MessageQueue四個(gè)部分。但我們?cè)谧o(hù)理開發(fā)中,

面試:Handler的工作原理是怎樣的?

Handler機(jī)制工作原理:

Handler工作流程基本上除開Handler、Looper、Message、MessageQueue四個(gè)部分。但我們?cè)谧o(hù)理開發(fā)中,偶爾會(huì)都只會(huì)要用Handler和Message兩個(gè)類。Message負(fù)責(zé)消息的均搭載了,里面有個(gè)target作用于標(biāo)志消息,string主要是用于存放內(nèi)容,Handler你們負(fù)責(zé)消息的分發(fā)和處理。

下面具體給你回答下:

Handler機(jī)制是由Looper和MessageQueue來(lái)構(gòu)建消息機(jī)制的。

MessageQueue:消息隊(duì)列。只不過(guò)名為隊(duì)列,然而事實(shí)并非如此它的內(nèi)部存儲(chǔ)結(jié)構(gòu)并不是什么唯一的隊(duì)列,而是區(qū)分單鏈表的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)消息列表的,其中主要注意有再插入enqueue()和之中飛出帶走并徹底刪除next()兩個(gè)方法。

Looper:消息非循環(huán)。MessageQueue來(lái)存儲(chǔ)消息,Looper則是以循環(huán)吧的去中搜索如何確定有新消息,如有就去如何處理,若沒(méi)有就standby(靜靜的等待)。一個(gè)線程創(chuàng)建戰(zhàn)隊(duì)Handler時(shí)簡(jiǎn)單要?jiǎng)?chuàng)建Looper的,否則運(yùn)行錯(cuò)誤:RuntimeException:oh,noLooper()wasntapparentlyontothisthread,而且每個(gè)線程下只要?jiǎng)?chuàng)建戰(zhàn)隊(duì)一個(gè)Looper,否則會(huì)報(bào)錯(cuò):RuntimeException:Only oneLoopermay becreatedperthread。

面試中解釋,見意能自己學(xué)習(xí)總結(jié)一套自己的專屬答案,并再理解透,那樣當(dāng)碰到這個(gè)問(wèn)題,就能能回答的游刃有余!

如何優(yōu)雅的使用和理解線程池?你怎么看?

要把java線程池表述好因此用好,必須把并發(fā)編程的基礎(chǔ)知識(shí)掌握到好,另外把線程池的所有API的官方文檔仔細(xì)閱讀理解研究什么一遍。這里把優(yōu)雅的使用線程池的要點(diǎn)總結(jié)不勝感激:

1.弄明白你要用線程池干什么。比如你的目的是把歌詞同步API改造為異步,應(yīng)該打算并發(fā)幫忙多個(gè)外部服務(wù),肯定減少線程的創(chuàng)建戰(zhàn)隊(duì)和銷毀以處理用戶請(qǐng)求等。

2.依據(jù)你的不好算項(xiàng)目需求,配置好線程池的參數(shù),具體看以及corePoolSize,maximumPoolSize,阻塞住隊(duì)列,keepAliveTime,線程工廠和飽和現(xiàn)象策略(也可以說(shuō)是RejectedExecutionHandler)。

3.據(jù)你的應(yīng)用特點(diǎn)部署線程池。有的后臺(tái)服務(wù)運(yùn)用適合我在起動(dòng)的時(shí)候最少修改好線程池,在應(yīng)用的執(zhí)行過(guò)程不再繼續(xù)如何修改線程池。有的時(shí)候,應(yīng)用比較適合原先創(chuàng)建一個(gè)線程池而且把任務(wù)遞交出來(lái),使用以后之后立刻強(qiáng)制銷毀。

4.當(dāng)你確定并沒(méi)有在用線程池之后,肯定全局函數(shù)shutdown()以優(yōu)雅的關(guān)閉線程池。shutdown也可以可以保證之前早就再提交到線程池中的任務(wù)不可能被丟棄,保證了數(shù)據(jù)安全。

5.當(dāng)內(nèi)部函數(shù)了shutdown之后,線程池此時(shí)巳經(jīng)很可能在執(zhí)行任務(wù),只不過(guò)是關(guān)了了重新提交任務(wù)的入口。如果沒(méi)有不需要耐心的等待線程池完全重新開啟,不需要調(diào)用awaitTerminate以等待線程池把隊(duì)列中的任務(wù)完全處理結(jié)束并且清理過(guò)完成,接著才趕往。awaitTerminate順利直接返回了,線程池不算是真的清理干凈了。

總結(jié)歸納一下,線程池通過(guò)創(chuàng)建(構(gòu)造方法)、遞交任務(wù)(execute)、定期清理(shutdown),耐心的等待定時(shí)清理都結(jié)束了(awaitTerminate)的順序動(dòng)態(tài)鏈接庫(kù)API,這樣的不使用線程池才算優(yōu)雅。要想用好java線程池,價(jià)值最大化優(yōu)化程序的性能可以不做個(gè)參考我公眾號(hào)里的分析文章。