EP32-性能優(yōu)化最佳實(shí)踐之多線程操作

性能優(yōu)化最佳實(shí)踐之多線程操作

今天本來是想分析一下Handler源碼,在Android Developers看到了對(duì)多線程比較完整的介紹吐限,覺得應(yīng)該從線程學(xué)起澡为。這個(gè)文章是對(duì)它的整理、理解和發(fā)散摸屠,包括對(duì)線程的理解谓罗。其中一些簡單的東西就省略了。

發(fā)送動(dòng)作給多個(gè)線程

指定部分代碼運(yùn)行在Thread里面

Thread和Runnable是基本的類季二,獨(dú)自運(yùn)作的話能力有限檩咱;但是他們是很多強(qiáng)大的類比如 HandlerThread, AsyncTask, and IntentService的基礎(chǔ)。同時(shí)Thread和Runnable還是ThreadPoolExecutor的基礎(chǔ)胯舷,ThreadPoolExecutor自動(dòng)管理進(jìn)程和任務(wù)隊(duì)列刻蚯,甚至能并行運(yùn)行多個(gè)線程。

Runnable接口只有一個(gè)run()方法桑嘶。把想要運(yùn)行在新的線程里的內(nèi)容寫在run()里面炊汹。注意Runnable不會(huì)運(yùn)行在UI Thread中。在run()方法的開始逃顶,可以使用Process.setThreadPriority(),可以減少Runnable對(duì)象進(jìn)程和UI進(jìn)程之間的競爭讨便。

疑問充甚,為什么實(shí)現(xiàn)Runnable接口就可以實(shí)現(xiàn)多線程?

學(xué)線程的時(shí)候霸褒,一般會(huì)有學(xué)到兩種方法:

  • 繼承Thread類 :MyThread().start();
  • 實(shí)現(xiàn)Runnable接口 : new Thread(myRunnable).start();

但其實(shí)Runnable只是一個(gè)interface伴找,里面只有一個(gè)run方法;為什么它可以實(shí)現(xiàn)多線程呢废菱?

從Thread源碼中看到技矮,Thread也是實(shí)現(xiàn)了Runnable接口的,也覆寫了run方法昙啄,方法說明:

  • If this thread was constructed using a separate
    • <code>Runnable</code> run object, then that
    • <code>Runnable</code> object's <code>run</code> method is called;
    • otherwise, this method does nothing and returns.

也就是說穆役,如果這個(gè)Thread是通過獨(dú)立的Runnable run對(duì)象構(gòu)建的,那么那個(gè)Runnable run方法會(huì)被調(diào)用梳凛,否則耿币,這個(gè)方法什么都不做并且返回。

Thread的構(gòu)造方法傳入一個(gè)Runnable(它的構(gòu)造方法是重載的韧拒,這里取了其中一個(gè)):

    public Thread(Runnable target, String name) {
        init(null, target, name, 0);
    }

init方法接收這個(gè)Runnable為target淹接,然后如果target不為空,就執(zhí)行Runnable的run方法:

    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

真是接口的典型應(yīng)用啊叛溢。Runnable只是為了實(shí)現(xiàn)Thread不能實(shí)現(xiàn)的「多繼承」而出現(xiàn)的塑悼。如果不執(zhí)行start方法,是不會(huì)在新線程中執(zhí)行run里面的代碼的楷掉。start方法會(huì)讓JVM調(diào)用當(dāng)前Thread的run方法厢蒜。

大部分資料都會(huì)推薦大家用Runnable多過繼承Thread,因?yàn)槿绻皇窍胗枚嗑€程中的run方法烹植,沒必要繼承一個(gè)Thread斑鸦,除非想要改變Thread中的某個(gè)行為。但是問題是草雕,這兩種方式難道不都是要new一個(gè)對(duì)象巷屿,占用同樣多的內(nèi)存空間么。墩虹。

-Jan 5

Reference:
[1]http://www.tuicool.com/articles/Z3aEbeF

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘱巾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诫钓,更是在濱河造成了極大的恐慌旬昭,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菌湃,死亡現(xiàn)場離奇詭異稳懒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)慢味,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門场梆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纯路,你說我怎么就攤上這事或油。” “怎么了驰唬?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵顶岸,是天一觀的道長。 經(jīng)常有香客問我叫编,道長辖佣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任搓逾,我火速辦了婚禮卷谈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘霞篡。我一直安慰自己世蔗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布朗兵。 她就那樣靜靜地躺著污淋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪余掖。 梳的紋絲不亂的頭發(fā)上寸爆,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音盐欺,去河邊找鬼赁豆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛找田,可吹牛的內(nèi)容都是我干的歌憨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼墩衙,長吁一口氣:“原來是場噩夢啊……” “哼务嫡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起漆改,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤心铃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后挫剑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體去扣,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年樊破,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愉棱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唆铐。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奔滑,靈堂內(nèi)的尸體忽然破棺而出艾岂,到底是詐尸還是另有隱情,我是刑警寧澤朋其,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布王浴,位于F島的核電站,受9級(jí)特大地震影響梅猿,放射性物質(zhì)發(fā)生泄漏氓辣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一袱蚓、第九天 我趴在偏房一處隱蔽的房頂上張望钞啸。 院中可真熱鬧,春花似錦癞松、人聲如沸爽撒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硕勿。三九已至,卻和暖如春枫甲,著一層夾襖步出監(jiān)牢的瞬間源武,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工想幻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粱栖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓脏毯,卻偏偏與公主長得像闹究,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子食店,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容