線程的創(chuàng)建方式及使用

1、繼承thread類,重寫run方法,直接調(diào)用.start()方法啟動(dòng)

public class Mythread extends Thread{

? ? public void run(){

? ? }

}

public classMain{

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

? ? ? ?new Mythread().start();

? ? }

}

2、實(shí)現(xiàn)runnable接口,重寫run方法,new對(duì)象放到thread類中,得到thread對(duì)象,再調(diào)用.start()啟動(dòng)

public class Mythread implement runnable{

? ?public void run(){

? ?}

}

public class Main{

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

? ? ?Mythread? mythread =new?Mythread ();

? ? Thread thread=new Thread(mythread?);

? ? thread.start();

? ? ?}

}

3、JAVA啟動(dòng)時(shí)候運(yùn)行了多少線程?

至少兩個(gè):主線程(main方法)和GC(垃圾回收機(jī)制)

4、start()和run()的區(qū)別?

Start()是啟動(dòng)線程,使線程處于就緒狀態(tài),供jvm來(lái)調(diào)用執(zhí)行。

run()是運(yùn)行處于就緒狀態(tài)的線程

如果直接調(diào)用run()方法,程序中只有主線程一個(gè)線程。

如果用start()來(lái)調(diào)用,不僅有主線程,還有我們自己要執(zhí)行的線程。

通過(guò)start()方法啟動(dòng)線程的同時(shí)也創(chuàng)建了一個(gè)線程,真正實(shí)現(xiàn)了多線程。此時(shí)start()的這個(gè)線程處于就緒狀態(tài),當(dāng)?shù)玫紺PU的時(shí)間片后就會(huì)執(zhí)行其中的run()方法。

5、sleep()和wait()的區(qū)別:

獲得對(duì)象鎖代表獲得了運(yùn)行所需的資源,進(jìn)入就緒狀態(tài),只要獲得CPU,就可以進(jìn)入運(yùn)行狀態(tài)。

sleep()只是線程在一定時(shí)間內(nèi)休眠,讓出了CPU,但是并沒(méi)有釋放對(duì)象鎖,時(shí)間到了之后獲取到CPU就可以運(yùn)行。

wait()是線程進(jìn)入等待狀態(tài),釋放了所占有的所有資源,包括對(duì)象鎖,必須依靠其他線程調(diào)用notify()或notifyAll()方法才能被喚醒,線程被喚醒后會(huì)進(jìn)入鎖池,等待獲取鎖標(biāo)記。(notify()只是喚醒一個(gè)線程,但我們由不能確定具體喚醒的是哪一個(gè)線程)

wait()?和?notify()?方法這一對(duì)方法卻必須在?synchronized?方法或塊中調(diào)用,因?yàn)橹挥性趕ynchronized方法或塊中當(dāng)前線程才占有鎖,才有鎖可以釋放,否則在運(yùn)行時(shí)會(huì)出現(xiàn)IllegalMonitorStateException異常。

6、線程的狀態(tài):

新建、就緒、運(yùn)行、阻塞(等待阻塞【執(zhí)行wait()方法】、同步阻塞【同步鎖被別的線程占用】,其他阻塞【執(zhí)行sleep()或join()方法】)、掛起【調(diào)用resume()方法】、死亡。

7、常用方法:

currentThread():取得當(dāng)前正在運(yùn)行的線程對(duì)象

.currentThread().getName():獲得當(dāng)前線程名稱

.currentThread().getName():設(shè)置當(dāng)前線程名稱

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 線程的名稱一般在啟動(dòng)線程前設(shè)置: newThread(mt,"線程-A").start() ;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果沒(méi)有手動(dòng)設(shè)置,則系統(tǒng)自動(dòng)設(shè)置線程名稱。

.isAlive():判斷線程是否啟動(dòng)

.join():暫停其他線程,強(qiáng)制優(yōu)先執(zhí)行該線程

.sleep(時(shí)間):設(shè)置線程休眠一段時(shí)間,到時(shí)間后自動(dòng)啟動(dòng)

.interrupt():中斷線程執(zhí)行

.setDaemon(true):設(shè)置線程在后臺(tái)執(zhí)行

線程優(yōu)先級(jí)分類:最低,最高,普通

(Thread.MIN_PRIORITY,Thread.MAX_PRIORITY,Thread.NORM_PRIORITY)

.setPriority():設(shè)置優(yōu)先級(jí)

.getPriority():獲取優(yōu)先級(jí)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對(duì)應(yīng)一個(gè)進(jìn)程,當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程.進(jìn)程是處于運(yùn)行過(guò)程中...
    勝浩_ae28閱讀 5,260評(píng)論 0 23
  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類 二實(shí)現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 3,115評(píng)論 1 18
  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。 首先講...
    李欣陽(yáng)閱讀 2,602評(píng)論 1 15
  • 一、線程的生命周期 線程狀態(tài)轉(zhuǎn)換圖: 1、新建狀態(tài) 用new關(guān)鍵字和Thread類或其子類建立一個(gè)線程對(duì)象后,該線...
    我是嘻哈大哥閱讀 1,030評(píng)論 0 8
  • 梅修于谷底 抖落纖塵數(shù)萬(wàn) 在傲霜斗雪的臘月 把凝香的花絮采集下來(lái) 去裝點(diǎn)星光閃爍的天際 和那搖曳著長(zhǎng)夜的漁火 一起...
    靜靜的馬頰河閱讀 401評(píng)論 5 7

友情鏈接更多精彩內(nèi)容