線程Thread&Runnable

進程:

正在進行中的程序(直譯)淆党。對應的是一個程序在內(nèi)存中開辟的所屬空間。

線程:

進程中的一個負責程序執(zhí)行的控制單元(執(zhí)行路徑)。一個進程中可以有多個執(zhí)行路徑趣惠,成為多線程。

一個進程中至少有一個線程身害。

開啟多個線程是為了同時運行多部分代碼味悄,每一個線程都有自己運行的內(nèi)容。這個內(nèi)容可以稱為線程要執(zhí)行的任務塌鸯。

多線程好處:解決了多部分同時運行的問題侍瑟。

多線程弊端:線程太多會導致效率的降低。

其實應用程序的執(zhí)行都是cpu在做著快速的切換完成的丙猬。這個切換是隨機的涨颜。

JVM的多線程

JVM啟動時,就啟動了多個線程茧球,至少有兩個線程可以分析的出來庭瑰。

1. 執(zhí)行main函數(shù)的線程

該線程的任務代碼都定義在main函數(shù)中

2. 負責垃圾回收的線程

繼承Thread類:

如何創(chuàng)建一個線程呢?

創(chuàng)建線程方式一:繼承Thread類

步驟:

1. 定義一個類繼承Thread類;

2. 覆蓋Thread類中的run方法

3. 直接創(chuàng)建Thread的子類對象創(chuàng)建線程

4. 調(diào)用start方法先開啟線程袜腥,并調(diào)用線程的任務run方法執(zhí)行见擦。

創(chuàng)建線程的目的是為了開啟一條執(zhí)行路徑,去運行指定的代碼和其他代碼實現(xiàn)同時運行羹令。而運行的指定代碼就是這個執(zhí)行路徑的任務鲤屡。jvm創(chuàng)建的主線程的任務都定義在了主函數(shù)中。

而自定義的線程它的任務在哪兒呢福侈?

Thread類用于描述線程酒来,線程是需要任務的。所以Thread類也有對任務的描述肪凛。這個任務就通過Thread類中的run方法來體現(xiàn)堰汉。也就是說辽社,run方法就是封裝自定義線程運行任務的函數(shù)。run方法中定義就是線程要運行的任務代碼翘鸭。

開啟線程是為了運行指定代碼滴铅。所以只有繼承Thread類,并復寫run方法就乓。將運行的代碼定義在run方法中即可汉匙。

可以通過Thread的getName獲取線程的名稱。Thread-編號(從0開始)

主線程的名字是main

線程的狀態(tài):

實現(xiàn)Runnable接口:

創(chuàng)建線程方式二:實現(xiàn)Runnable接口

1. 定義類實現(xiàn)Runnable接口

2. 覆蓋接口中的run方法生蚁,將線程的任務代碼封裝到run方法中

3. 通過Thread類創(chuàng)建線程對象噩翠,并將Runnable接口的子類對象作為構(gòu)造函數(shù)的參數(shù)進行傳遞。為什么邦投?

因為線程的任務都封裝在Runnable接口子類對象的run方法中伤锚。所以要在線程對象創(chuàng)建時就必須明確要運行的任務。

4. 調(diào)用線程對象的start方法開啟線程志衣。

實現(xiàn)Runnable接口的好處:

1. 將線程的任務從線程的子類中分離出來進行了單獨的封裝屯援。按照面向?qū)ο蟮乃枷雽⑷蝿辗庋b成對象。

2. 避免了java單繼承的局限性蠢涝。

所以創(chuàng)建線程的第二種方式較為常用玄呛。

其實,Thread類也實現(xiàn)了Runnable接口和二。

練習:

線程安全問題產(chǎn)生原因:

1. 多個線程在操作共存的數(shù)據(jù)

2. 操作共享數(shù)據(jù)的線程代碼有多條

當一個線程在執(zhí)行操作共享數(shù)據(jù)的多條代碼過程中,其他線程參與了運算耳胎,就會導致線程安全問題的產(chǎn)生惯吕。

解決思路:就是將多條操作共享數(shù)據(jù)的線程代碼封裝起來,當有線程在執(zhí)行這些代碼的時候怕午,其他線程是不可以參與運算的废登。必須要當前線程把這些代碼都執(zhí)行完畢后,其他線程才可以參與運算郁惜。

在java中堡距,用同步代碼塊就能解決這個問題。

同步synchronized:

同步代碼塊的格式:

synchronized(對象){

需要被同步的代碼兆蕉;

}

舉例:

同步的好處:解決了線程的安全問題羽戒。

同步的弊端:相對降低了效率,因為同步外的線程都會判斷同步鎖虎韵。

同步的前提:同步中必須有多個線程并使用同一個鎖易稠。

同步函數(shù):

同步函數(shù)使用的鎖是this;

同步函數(shù)和同步代碼塊的區(qū)別:

同步函數(shù)的鎖是固定的this包蓝,同步代碼塊的鎖是任意的對象驶社。建議使用同步代碼塊企量。

靜態(tài)的同步函數(shù)使用的鎖是該函數(shù)所屬字節(jié)碼文件對象⊥龅纾可以用getclass()方法獲取届巩,也可以用當前類名.class表示。

死鎖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末份乒,一起剝皮案震驚了整個濱河市姆泻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冒嫡,老刑警劉巖拇勃,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孝凌,居然都是意外死亡方咆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門蟀架,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓣赂,“玉大人,你說我怎么就攤上這事片拍』图” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵捌省,是天一觀的道長苫纤。 經(jīng)常有香客問我,道長纲缓,這世上最難降的妖魔是什么卷拘? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮祝高,結(jié)果婚禮上栗弟,老公的妹妹穿的比我還像新娘。我一直安慰自己工闺,他們只是感情好乍赫,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陆蟆,像睡著了一般雷厂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遍搞,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天罗侯,我揣著相機與錄音,去河邊找鬼溪猿。 笑死钩杰,一個胖子當著我的面吹牛纫塌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讲弄,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼措左,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了避除?” 一聲冷哼從身側(cè)響起怎披,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓶摆,沒想到半個月后凉逛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡群井,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年状飞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片书斜。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡诬辈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荐吉,到底是詐尸還是另有隱情焙糟,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布样屠,位于F島的核電站穿撮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瞧哟。R本人自食惡果不足惜混巧,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勤揩。 院中可真熱鬧,春花似錦秘蛔、人聲如沸陨亡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽负蠕。三九已至,卻和暖如春倦畅,著一層夾襖步出監(jiān)牢的瞬間遮糖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工叠赐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留欲账,地道東北人屡江。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像赛不,于是被迫代替她去往敵國和親惩嘉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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

  • 下面是我自己收集整理的Java線程相關的面試題踢故,可以用它來好好準備面試文黎。 參考文檔:-《Java核心技術 卷一》-...
    阿呆變Geek閱讀 14,738評論 14 507
  • Java多線程學習 [-] 一擴展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,952評論 1 18
  • 本文主要講了java中多線程的使用方法、線程同步殿较、線程數(shù)據(jù)傳遞钝计、線程狀態(tài)及相應的一些線程函數(shù)用法、概述等破婆。 首先講...
    李欣陽閱讀 2,442評論 1 15
  • 該文章轉(zhuǎn)自:http://blog.csdn.net/evankaka/article/details/44153...
    加來依藍閱讀 7,333評論 3 87
  • 3. 創(chuàng)建新線程 創(chuàng)建一個線程有兩種方法: 從Thread類繼承并重寫run()方法苗踪。創(chuàng)建一個實例,調(diào)用star...
    vancent閱讀 467評論 0 0