java多線程

參考文章

如何創(chuàng)建并運行java線程 | 并發(fā)編程網(wǎng) – ifeve.com

(此文摘取了其中一些知識點航揉,具體知識點及源碼請于鏈接處觀看)

創(chuàng)建并運行java線程

1.創(chuàng)建Thread的子類

注意

一旦線程啟動后start方法就會立即返回驶乾,而不會等待到run方法執(zhí)行完畢才返回邑飒。就好像run方法是在另外一個cpu上執(zhí)行一樣。

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

為了使線程能夠執(zhí)行run()方法级乐,需要在Thread類的構(gòu)造函數(shù)中傳入?MyRunnable的實例對象疙咸。示例如下:

Thread thread = new Thread(new MyRunnable());

thread.start();

3.創(chuàng)建子類還是實現(xiàn)Runnable接口?

線程池可以有效的管理實現(xiàn)了Runnable接口的線程风科,如果線程池滿了撒轮,新的線程就會排隊等候執(zhí)行乞旦,直到線程池空閑出來為止。而如果線程是通過實現(xiàn)Thread子類實現(xiàn)的题山,這將會復(fù)雜一些

4.常見錯誤:調(diào)用run()方法而非start()方法

事實上,run()方法并非是由剛創(chuàng)建的新線程所執(zhí)行的兰粉,而是被創(chuàng)建新線程的當(dāng)前線程所執(zhí)行了。也就是被執(zhí)行上面兩行代碼的線程所執(zhí)行的顶瞳。想要讓創(chuàng)建的新線程執(zhí)行run()方法玖姑,必須調(diào)用新線程的start方法。

5.獲取線程名

Thread子類:調(diào)用getName()

Runnable的實現(xiàn)類

線程安全與共享資源

允許被多個線程同時執(zhí)行的代碼稱作線程安全的代碼慨菱。線程安全的代碼不包含競態(tài)條件焰络。當(dāng)多個線程同時更新共享資源時會引發(fā)競態(tài)條件。

1.局部變量和對象

局部變量存儲在線程自己的棧中符喝。也就是說闪彼,局部變量永遠(yuǎn)也不會被多個線程共享

2.局部對象的引用

所有的對象都存在共享堆中。如果在某個方法中創(chuàng)建的對象不會逃逸出(譯者注:即該對象不會被其它方法獲得协饲,也不會被非局部變量引用到)該方法畏腕,那么它就是線程安全的。實際上囱稽,哪怕將這個對象作為參數(shù)傳給其它方法郊尝,只要別的線程獲取不到這個對象,那它仍是線程安全的战惊。

public void someMethod(){


? LocalObject localObject = new LocalObject();

? localObject.callMethod();

? method2(localObject);

}

public void method2(LocalObject localObject){

? localObject.setValue("value");

}

樣例中LocalObject對象沒有被方法返回流昏,也沒有被傳遞給someMethod()方法外的對象。每個執(zhí)行someMethod()的線程都會創(chuàng)建自己的LocalObject對象吞获,并賦值給localObject引用况凉。因此,這里的LocalObject是線程安全的各拷。事實上刁绒,整個someMethod()都是線程安全的。即使將LocalObject作為參數(shù)傳給同一個類的其它方法或其它類的方法時烤黍,它仍然是線程安全的知市。當(dāng)然,如果LocalObject通過某些方法被傳給了別的線程速蕊,那它就不再是線程安全的了嫂丙。

線程控制逃逸規(guī)則

如果一個資源的創(chuàng)建,使用规哲,銷毀都在同一個線程內(nèi)完成跟啤,

且永遠(yuǎn)不會脫離該線程的控制,則該資源的使用就是線程安全的。

資源可以是對象隅肥,數(shù)組竿奏,文件,數(shù)據(jù)庫連接腥放,套接字等等泛啸。Java中你無需主動銷毀對象,所以“銷毀”指不再有引用指向?qū)ο蟆?/p>

即使對象本身線程安全捉片,但如果該對象中包含其他資源(文件平痰,數(shù)據(jù)庫連接),整個應(yīng)用也許就不再是線程安全的了伍纫。比如2個線程都創(chuàng)建了各自的數(shù)據(jù)庫連接宗雇,每個連接自身是線程安全的,但它們所連接到的同一個數(shù)據(jù)庫也許不是線程安全的莹规。比如赔蒲,2個線程執(zhí)行如下代碼:

????檢查記錄X是否存在,如果不存在良漱,插入X

如果兩個線程同時執(zhí)行舞虱,而且碰巧檢查的是同一個記錄,那么兩個線程最終可能都插入了記錄:

線程1檢查記錄X是否存在母市。檢查結(jié)果:不存在

線程2檢查記錄X是否存在矾兜。檢查結(jié)果:不存在

線程1插入記錄X

線程2插入記錄X

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市患久,隨后出現(xiàn)的幾起案子椅寺,更是在濱河造成了極大的恐慌,老刑警劉巖蒋失,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件返帕,死亡現(xiàn)場離奇詭異,居然都是意外死亡篙挽,警方通過查閱死者的電腦和手機(jī)荆萤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铣卡,“玉大人链韭,你說我怎么就攤上這事≈舐洌” “怎么了敞峭?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長州邢。 經(jīng)常有香客問我儡陨,道長,這世上最難降的妖魔是什么量淌? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任骗村,我火速辦了婚禮,結(jié)果婚禮上呀枢,老公的妹妹穿的比我還像新娘胚股。我一直安慰自己,他們只是感情好裙秋,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布琅拌。 她就那樣靜靜地躺著,像睡著了一般摘刑。 火紅的嫁衣襯著肌膚如雪进宝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天枷恕,我揣著相機(jī)與錄音党晋,去河邊找鬼。 笑死徐块,一個胖子當(dāng)著我的面吹牛未玻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胡控,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扳剿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昼激?” 一聲冷哼從身側(cè)響起庇绽,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎癣猾,沒想到半個月后敛劝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡纷宇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年夸盟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片像捶。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡上陕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拓春,到底是詐尸還是另有隱情释簿,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布硼莽,位于F島的核電站庶溶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜偏螺,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一行疏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧套像,春花似錦酿联、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至柳譬,卻和暖如春喳张,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背美澳。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工蹲姐, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赠制,地道東北人串述。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓葛闷,卻偏偏與公主長得像舅柜,于是被迫代替她去往敵國和親土辩。 傳聞我的和親對象是個殘疾皇子娶视,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354