(二)Thread類

Java多線程目錄

介紹

從上文中我們知道開啟一個線程需要使用Thread類,自我理解Thread類是一個線程的控制類,它自身并不是一個線程,而線程是里面的run方法,所以我們了解這個類,就是了解這個Thread類是怎么控制線程的創(chuàng)建、運行、中斷、阻塞、休眠的。

方法

1.創(chuàng)建

Thread類提供了很多構(gòu)造方法,這個構(gòu)造方法都是調(diào)用了Thread類中的init方法,來初始化一個線程控制對象,

    private void init(ThreadGroup g, Runnable target, String name,
                      long stackSize, AccessControlContext acc,
                      boolean inheritThreadLocals) {  }

Thread類的構(gòu)造函數(shù)都是調(diào)用的這個,而且參數(shù)概念也是對應的,最后面的兩個參數(shù)暫時不用了解

  1. ThreadGroup: 線程所屬的線程組,為線程分類,一般不用
  2. Runnable, 用來實現(xiàn)線程的具體接口實現(xiàn),
  3. name: 線程的名字,
  4. stackSize; 線程所需的堆棧大小,這個很少使用,默認是0

2.啟動

start()函數(shù)啟動當前線程。

3.currentThread

這個是Thread類的靜態(tài)方法,這個也比較重要,可以在當前線程里獲取該線程的配置信息。

public class ThreadOne extends Thread{
    @Override
    public void run() {
        super.run();
        Thread.currentThread().getName();  //當前線程名字
        Thread.currentThread().getId();    //線程id
        Thread.currentThread().getPriority();  //線程優(yōu)先級
    }
}

如上例子,這些線程信息是我們在線程啟動前配置的,在線程內(nèi)我們可以很好的利用這個currentThread方法來獲取線程信息。

4.中斷方法

中斷方法是一組方法,包含設置中斷標志位,檢測中斷標志位,他是其他線程用來告訴本線程需要中斷了,

public void interrupt();
public boolean isInterrupted();
public static boolean interrupted();

第一個方法:設置中斷標記,這個是其他線程調(diào)用的本線程對象,其他線程告訴本線程中斷。
第二個方法:檢測線程是否中斷,也就是第一個方法是否調(diào)用過,中斷則返回true,否則返回false.
第三個方法:判斷當前線程的中斷狀態(tài)并清除標記位,這個與第二個方法不同之處在于會清楚標記位,也就是這個方法被調(diào)用兩次,第一次中斷狀態(tài)清楚,第二次永遠放回false.

5: sleep(1000)

這個方法讓線程停止運行,休眠一段時間,參數(shù)是毫秒,這里設置的是1s.但這里要注意兩點。
注意1: sleep不會釋放線程鎖,在帶鎖的線程中注意使用。
注意2:sleep會被interrupt中斷,也就是說interrupt會停止你的sleep,而卻sleep會清楚中斷標記位。

6. wait() / wait(1000)

這個方法會使線程等待。
wait()等待的是其他線程的notify通知,線程才會繼續(xù)執(zhí)行,
wait(1000):會等待一段時間后,繼續(xù)執(zhí)行。
注意:wait方法會釋放線程鎖,重新返回或者notify需要重新競爭鎖。

7. join

官方解釋Waits for this thread to die., 等待這個線程結(jié)束,源碼也是這樣利用wait來實現(xiàn)的。

public void test(){
  Thread one = new MyThread();
  one.start();
  one.join();
  System.out.println("test");
}

這樣test函數(shù)就會等待one線程執(zhí)行完后再接著執(zhí)行自己,間接的決定了線程的執(zhí)行順序。

8.yield()

使當前線程由運行狀態(tài)轉(zhuǎn)為就緒狀態(tài),讓出CPU時間,讓下一個線程執(zhí)行,下個線程中該線程可能執(zhí)行也可能不執(zhí)行。這個方法不長用。

9.廢棄方法,

Java中已將廢棄stop resume suspend等線程停止等方法。

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

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

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