黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java多線程基礎(chǔ)開發(fā)詳細(xì)教程

Java多線程基礎(chǔ)開發(fā)詳細(xì)教程

更新時(shí)間:2019-09-05 09:48:31 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3507次

java中的多線程是一個(gè)同時(shí)執(zhí)行多個(gè)線程的過程。

  線程基本上是一個(gè)輕量級(jí)的子進(jìn)程,是最小的處理單元。多處理和多線程,都用于實(shí)現(xiàn)多任務(wù)處理。

  但是我們使用多線程而不是多處理,因?yàn)榫€程共享一個(gè)公共內(nèi)存區(qū)域。它們不分配單獨(dú)的內(nèi)存區(qū)域,因此節(jié)省了內(nèi)存,并且線程之間的上下文切換花費(fèi)的時(shí)間少于進(jìn)程。

  Java多線程主要用于游戲,動(dòng)畫等

  Java多線程的優(yōu)點(diǎn)

  1)它不會(huì)阻止用戶,因?yàn)榫€程是獨(dú)立的,您可以同時(shí)執(zhí)行多個(gè)操作。

  2)您可以一起執(zhí)行許多操作,因此可以節(jié)省時(shí)間。

  3)線程是獨(dú)立的,如果單線程中發(fā)生異常,它不會(huì)影響其他線程。

  多任務(wù)處理

  多任務(wù)是同時(shí)執(zhí)行多個(gè)任務(wù)的過程。我們使用多任務(wù)來利用CPU。多任務(wù)可以通過兩種方式實(shí)現(xiàn):

  基于過程的多任務(wù)(多處理)

  基于線程的多任務(wù)(多線程)

  1)基于過程的多任務(wù)(多處理)

  每個(gè)進(jìn)程在內(nèi)存中都有自己的地址,即每個(gè)進(jìn)程分配單獨(dú)的內(nèi)存區(qū)域。

  過程是重量級(jí)的。

  過程之間的溝通成本很高。

  從一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程需要一些時(shí)間來保存和加載寄存器,內(nèi)存映射,更新列表等。

  2)基于線程的多任務(wù)(多線程)

  線程共享相同的地址空間。

  線程輕量級(jí)。

  線程之間的通信成本很低。

  什么是Java中的線程

  線程是一個(gè)輕量級(jí)的子進(jìn)程,是最小的處理單元。這是一個(gè)獨(dú)立的執(zhí)行路徑。

  線程是獨(dú)立的,如果在一個(gè)線程中發(fā)生異常,它不會(huì)影響其他線程。它共享一個(gè)共同的內(nèi)存區(qū)域。

image.png

  線程的生命周期(線程狀態(tài))

  一個(gè)線程可以處于五個(gè)狀態(tài)之一。根據(jù)sun的說法,javanew中線程生命周期中只有4個(gè)狀態(tài),可運(yùn)行,不可運(yùn)行和終止。沒有運(yùn)行狀態(tài)。

  但為了更好地理解這些線索,我們正在5個(gè)州進(jìn)行解釋。

  Java中線程的生命周期由JVM控制。java線程狀態(tài)如下所示:

  • New
  • Runnable
  • Running
  • Non-Runnable(Blocked)
  • Terminated

image.png

  1)New

  如果創(chuàng)建Thread類的實(shí)例,但在調(diào)用start()方法之前,線程處于新狀態(tài)。

  2)Runnable

  線程在調(diào)用start()方法后處于可運(yùn)行狀態(tài),但線程調(diào)度程序沒有選擇它作為正在運(yùn)行的線程。

  3)Running

  如果線程調(diào)度程序選擇了線程,線程將處于運(yùn)行狀態(tài)。

  4)Non-Runnable(Blocked)

  這是線程仍然活著時(shí)的狀態(tài),但目前沒有資格運(yùn)行。

  5)Terminated

  當(dāng)其run()方法退出時(shí),線程處于終止或死態(tài)。

  如何創(chuàng)建線程

  有兩種方法可以創(chuàng)建一個(gè)線程:

  通過擴(kuò)展Thread類

  通過實(shí)現(xiàn)Runnable接口。

  線程類:

  Thread類提供構(gòu)造函數(shù)和方法來創(chuàng)建和執(zhí)行一個(gè)線程上的操作.Thread類擴(kuò)展了Object類并實(shí)現(xiàn)了Runnable接口。

  Thread類的常用構(gòu)造函數(shù):

  • Thread()
  • Thread(Stringname)
  • Thread(Runnabler)
  • Thread(Runnabler,Stringname)

  Thread類的常用方法:

  publicvoidrun():用于為線程執(zhí)行操作。

  publicvoidstart():?jiǎn)?dòng)線程的執(zhí)行.JVM調(diào)用線程上的run()方法。

  publicvoidsleep(longmiliseconds):使當(dāng)前正在執(zhí)行的線程休眠(暫時(shí)停止執(zhí)行)達(dá)指定的毫秒數(shù)。

  publicvoidjoin():等待線程死亡。

  publicvoidjoin(longmiliseconds):等待一個(gè)線程在指定的毫秒內(nèi)死亡。

  publicintgetPriority():返回線程的優(yōu)先級(jí)。

  publicintsetPriority(intpriority):更改線程的優(yōu)先級(jí)。

  publicStringgetName():返回線程的名稱。

  publicvoidsetName(Stringname):更改線程的名稱。

  公共線程currentThread():返回當(dāng)前正在執(zhí)行的線程的引用。

  publicintgetId():返回線程的ID。

  publicThread.StategetState():返回線程的狀態(tài)。

  publicbooleanisAlive():測(cè)試線程是否存在。

  publicvoidyield():導(dǎo)致當(dāng)前正在執(zhí)行的線程對(duì)象暫時(shí)暫停并允許其他線程執(zhí)行。

  publicvoidsuspend():用于掛起線程(depricated)。

  publicvoidresume():用于恢復(fù)掛起的線程(depricated)。

  publicvoidstop():用于停止線程(depricated)。

  publicbooleanisDaemon():測(cè)試線程是否是守護(hù)進(jìn)程線程。

  publicvoidsetDaemon(booleanb):將線程標(biāo)記為守護(hù)進(jìn)程或用戶線程。

  publicvoidinterrupt():中斷線程。

  publicbooleanisInterrupted():測(cè)試線程是否被中斷。

  publicstaticbooleaninterrupted():測(cè)試當(dāng)前線程是否被中斷。

  可運(yùn)行界面:

  Runnable接口應(yīng)該由其實(shí)例旨在由線程執(zhí)行的任何類來實(shí)現(xiàn)。Runnable接口只有一個(gè)名為run()的方法。

  publicvoidrun():用于為線程執(zhí)行操作。

  開始一個(gè)線程:

  Thread類的start()方法用于啟動(dòng)新創(chuàng)建的線程。它執(zhí)行以下任務(wù):

  一個(gè)新線程開始(使用新的callstack)。

  線程從New狀態(tài)移動(dòng)到Runnable狀態(tài)。

  當(dāng)線程有機(jī)會(huì)執(zhí)行時(shí),其目標(biāo)run()方法將運(yùn)行。

  1)擴(kuò)展Thread類的Java線程示例

image.png

  2)通過實(shí)現(xiàn)Runnable接口的Java線程示例

image.png

  如果你不擴(kuò)展Thread類,你的類對(duì)象不會(huì)被當(dāng)作線程對(duì)象。所以你需要明確地創(chuàng)建Thread類object.We傳遞你的類的實(shí)現(xiàn)Runnable的對(duì)象,以便你的類run()方法可能會(huì)執(zhí)行。

  Java中的線程調(diào)度程序

  線程schedulerinjava是決定哪個(gè)線程應(yīng)該運(yùn)行的JVM的一部分。

  不能保證哪個(gè)可運(yùn)行的線程將被線程調(diào)度器選擇運(yùn)行。

  一次只能有一個(gè)線程在單個(gè)進(jìn)程中運(yùn)行。

  線程調(diào)度器主要使用搶占或時(shí)間片調(diào)度來調(diào)度線程。

  搶先調(diào)度和時(shí)間分割之間的區(qū)別

  在搶先式調(diào)度下,執(zhí)行最高優(yōu)先級(jí)的任務(wù),直到它進(jìn)入等待狀態(tài)或死亡狀態(tài),或者產(chǎn)生更高優(yōu)先級(jí)的任務(wù)。在時(shí)間分割下,任務(wù)執(zhí)行預(yù)定義的時(shí)間片,然后重新進(jìn)入準(zhǔn)備好的任務(wù)池。然后,調(diào)度程序根據(jù)優(yōu)先級(jí)和其他因素確定下一個(gè)要執(zhí)行的任務(wù)。

  java中的睡眠方法

  Thread類的sleep()方法用于在指定的時(shí)間內(nèi)休眠一個(gè)線程。

  java中sleep()方法的語法

  Thread類提供了兩種睡眠線程的方法:

  publicstaticvoidsleep(longmiliseconds)throwsInterruptedException

  publicstaticvoidsleep(longmiliseconds,intnanos)throwsInterruptedException

  java中的睡眠方法示例

image.png

  正如你所知道的那樣,一次只有一個(gè)線程被執(zhí)行。如果你在指定的時(shí)間睡了一個(gè)線程,線程漏斗會(huì)拾取另一個(gè)線程,如此等等。

  我們可以開始一個(gè)線程兩次嗎?

  不可以。啟動(dòng)線程后,永遠(yuǎn)不會(huì)再次啟動(dòng)。如果你這樣做了,拋出一個(gè)IllegalThreadStateException異常。在這種情況下,線程將運(yùn)行一次但第二次,它會(huì)拋出異常。

  讓我們通過下面的例子來理解它:

image.png

  如果我們直接調(diào)用run()方法而不是start()方法呢?

  每個(gè)線程都在單獨(dú)的調(diào)用堆棧中啟動(dòng)。

  從主線程調(diào)用run()方法,run()方法會(huì)進(jìn)入當(dāng)前調(diào)用堆棧而不是新調(diào)用堆棧的開始處。

image.png

  問題是如果你直接調(diào)用run()方法

image.png

  正如你在上面的程序中看到的那樣,沒有上下文切換,因?yàn)樵谶@里t1和t2將被視為普通對(duì)象而不是線程對(duì)象。

  以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java多線程基礎(chǔ)開發(fā)詳細(xì)教程”的內(nèi)容,希望能夠幫助到大家,更多Java資訊最新內(nèi)容請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久97精品久久久久久久不卡 | 视频成人永久免费视频 | 久草视频免费 | 一级免费黄色片 | 欧美久久伊人 | 亚洲性色永久网址 | 深夜福利在线免费观看 | 女全身裸无遮挡免费毛片 | 国产天堂网 | 黄色片免费在线观看 | 国产欧美日韩精品第二区 | 成人黄色一级毛片 | 欧美日韩在线一区 | 五月激情丁香 | 午夜免费视频观看 | 成年人在线观看视频免费 | 涩涩屋黄| 555成人网免费观看视频 | 激情五月情 | 最近韩国日本免费 | 在线精品欧美 | 亚洲成在人线久久综合 | 国产综合色香蕉精品五月婷 | 香蕉视频好色先生 | 欧美成人三级视频 | 激情五月综合网 | 黄色网址视频免费 | 18成人网| 日韩啪| 中文字幕日韩专区 | 午夜日韩久久影院 | 欧洲xxx| 欧美乱色 | 欧美国产日韩一区 | 亚洲福利天堂 | 亚洲国产最新在线一区二区 | 中文字幕成人在线观看 | 天天天天做夜夜夜夜 | 午夜影院男女 | 91香蕉视频污在线观看 | 国产成人综合手机在线播放 |