Android面試之Thread

## Thread 相關(guān)知識點整理

1,Thread的作用芳来,Process和Thread的區(qū)別

2暴氏,Thread的創(chuàng)建方式

3,Thread的wait绣张,sleep的使用及Thread的終止方法

#### 一,Thread 的作用

1)開發(fā)中关带,進程會處理一些侥涵,耗時的操作沼撕,比如文件的下載等,使用時芜飘,我們都會創(chuàng)建一個Thread务豺,把任務(wù)放在Thread中執(zhí)行,可以簡單認為Thread為耗時任務(wù)的執(zhí)行者嗦明,

2)Android 中笼沥,一個應(yīng)用就是一個獨立的進程,當(dāng)然四大組件都可以在AndroidMainfirst.xml文件中注冊時添加process的屬性設(shè)置獨立的進程娶牌,這里不做主要講述奔浅。

線程和進程根本區(qū)別:進程是操作系統(tǒng)資源分配的執(zhí)行單元,而線程是任務(wù)調(diào)度和執(zhí)行的基本單元诗良。

每個進程都有獨立的代碼和數(shù)據(jù)空間汹桦,每個線程都有自己獨立的運行棧和程序計數(shù)器,同一類線程共享代碼和數(shù)據(jù)空間鉴裹,同一個進程中可以包含多個線程同時執(zhí)行舞骆。

#### 二,Thread的創(chuàng)建方法

1)通過繼承Thread實現(xiàn)

class NewThread extends Thread{

????public void run(){? //任務(wù)的執(zhí)行}

? ?}

啟動線程:new NewThread().start();

2)實現(xiàn)Runnable接口

class NewRunnable implements Runnable{

? ? ? ? public void run(){//任務(wù)的執(zhí)行}

}

啟動方式:

NewRunnable mRunnable=new NewRunnable();

new Thread(mRunnable).start();

主要區(qū)別:

繼承Thread類實現(xiàn)的多線程要求放入多線程中的類不能繼承其他類径荔,而實現(xiàn)Runnable接口的類可以防在多個線程中執(zhí)行督禽,多個線程可以去執(zhí)行同一資源,而繼承Thread類只能實現(xiàn)多個線程分別去處理自己的資源总处。

#### 線程中Wait狈惫,Sleep的使用及線程的終止

代碼源于生活,生活中辨泳,我們總是會遇到很多情況下虱岂,我們正在做某一件事時,總是會有一些事情或者情況的發(fā)生讓我需要暫筒ず欤或者休息一下第岖,過一會再繼續(xù)做當(dāng)前的事情,Thread的使用也是如此试溯,當(dāng)有優(yōu)先級比較高的任務(wù)和特殊情況發(fā)生時蔑滓,,我們需要讓當(dāng)前Thread暫停執(zhí)行遇绞,1)這就用到了Wait键袱,和Sleep。

具體使用如下:

```

public class Demo{

? ? final static Object person =new Object();

? ? public static class T1 extends Thread{

? ? ? ? public void run(){

? ? ? ? ? ? synchronized (person){

? ? ? ? ? ? ? ? System.out.println(System.currentTimeMillis()+"T1 come");

? ? ? ? ? ? ? ? try{

? ? ? ? ? ? ? ? ? ? System.out.println(System.currentTimeMillis()+"T1 wait");

? ? ? ? ? ? ? ? ? ? person.wait();

? ? ? ? ? ? ? ? }catch (InterruptedException r){

? ? ? ? ? ? ? ? ? ? r.getStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println(System.currentTimeMillis()+"T1 over");

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? public static class T2 extends Thread{

? ? ? ? public void run(){

? ? ? ? ? ? synchronized (person){

? ? ? ? ? ? ? ? System.out.println(System.currentTimeMillis()+"T2 come");

? ? ? ? ? ? ? ? person.notify();

? ? ? ? ? ? ? ? System.out.println(System.currentTimeMillis()+"T2 over");

? ? ? ? ? ? ? ? try{

? ? ? ? ? ? ? ? ? ? Thread.sleep(2000);

? ? ? ? ? ? ? ? }catch (InterruptedException r){

? ? ? ? ? ? ? ? ? ? r.getStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? public static void main(String args[]){

? ? ? ? try{

? ? ? ? ? ? Thread thread1=new T1();

? ? ? ? ? ? Thread thread2=new T2();

? ? ? ? ? ? thread1.start();

? ? ? ? ? ? thread2.start();

? ? ? ? }catch (Exception e){

? ? ? ? ? ? e.printStackTrace();

? ? ? ? }

? ? }

}

```

這里從別處借鑒過來的代碼摹闽,

Wait是Object類提供的方法,當(dāng)對象調(diào)用wait方法后蹄咖,會導(dǎo)致本地線程放棄對象鎖,進入等待此對象的等待鎖定池中付鹿,只有此對象發(fā)送notify方法或notifyAll方法后當(dāng)前線程才進入對象鎖定池準(zhǔn)備獲得對象鎖進入運行澜汤。

Sleep是Thread類提供的方法蚜迅,使用時會使當(dāng)前線程進入阻塞狀態(tài),在指定時間內(nèi)不會執(zhí)行俊抵,把執(zhí)行機會讓給其他線程谁不,但監(jiān)控狀態(tài)依然保持,到時會自動恢復(fù)徽诲,不會釋放鎖對象刹帕。

Sleep可以在任何地方使用,但必須捕獲異常谎替,而wait偷溺,nofity和notifyAll不需要捕獲異常,Sleep是一個靜態(tài)方法院喜,只對當(dāng)前對象有限亡蓉。

2)線程的終止方法

I,通過聲明一個Volatile 的標(biāo)示位變量停止

II喷舀,通過調(diào)用Thread類的Stop方法強制停止砍濒,不建議使用

III,使用Thread類提供的interrupt方法來中斷線程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硫麻,一起剝皮案震驚了整個濱河市爸邢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拿愧,老刑警劉巖杠河,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浇辜,居然都是意外死亡券敌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門柳洋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來待诅,“玉大人,你說我怎么就攤上這事熊镣”把悖” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵绪囱,是天一觀的道長测蹲。 經(jīng)常有香客問我,道長鬼吵,這世上最難降的妖魔是什么扣甲? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮齿椅,結(jié)果婚禮上文捶,老公的妹妹穿的比我還像新娘荷逞。我一直安慰自己,他們只是感情好粹排,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涩澡,像睡著了一般顽耳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妙同,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天射富,我揣著相機與錄音,去河邊找鬼粥帚。 笑死胰耗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芒涡。 我是一名探鬼主播柴灯,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼费尽!你這毒婦竟也來了赠群?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤旱幼,失蹤者是張志新(化名)和其女友劉穎查描,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柏卤,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡冬三,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缘缚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勾笆。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖忙灼,靈堂內(nèi)的尸體忽然破棺而出匠襟,到底是詐尸還是另有隱情,我是刑警寧澤该园,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布酸舍,位于F島的核電站,受9級特大地震影響里初,放射性物質(zhì)發(fā)生泄漏啃勉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一双妨、第九天 我趴在偏房一處隱蔽的房頂上張望淮阐。 院中可真熱鬧叮阅,春花似錦、人聲如沸泣特。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽状您。三九已至勒叠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膏孟,已是汗流浹背眯分。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柒桑,地道東北人弊决。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像魁淳,于是被迫代替她去往敵國和親飘诗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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