聲明本文使用的是JDK1.8java
實現多線程從本質上都是由Thread類來進行操做的~咱們來看看Thread類一些重要的知識點。Thread這個類很大,不可能整個把它看下來,只能看一些常見的、重要的方法。數據庫
1.1設置線程名安全
咱們在使用多線程的時候,想要查看線程名是很簡單的,調用Thread.currentThread().getName()便可。多線程
若是沒有作什麼的設置,咱們會發現線程的名字是這樣子的:主線程叫作main,其餘線程是Thread-xide
線程中nextThreadNum()方法實現爲咱們線程命名,若是咱們想要爲線程起個名字,那也是很簡單的。Thread給咱們提供了構造方法!spa
public class MyThread implements Runnable { @Override public void run() { // 打印出當前線程的名字 System.out.println(Thread.currentThread().getName()); } } public class MyThreadDemo { public static void main(String[] args) { MyThread myThread = new MyThread(); //帶參構造方法給線程起名字 Thread thread1 = new Thread(myThread, "harpoonJava"); Thread thread2 = new Thread(myThread, "harpoon"); thread1.start(); thread2.start(); // 打印當前線程的名字 System.out.println(Thread.currentThread().getName()); } }
結果:操作系統
main harpoonJava harpoon
固然了,咱們還能夠經過setName(String name)的方法來改掉線程的名字的。線程
1.2守護線程設計
守護線程是爲其餘線程服務的對象
守護線程有一個特色:
使用線程的時候要注意的地方:
1.3優先級線程
線程優先級高僅僅表示線程獲取的CPU時間片的概率高,但這不是一個肯定的因素!
線程的優先級是高度依賴於操做系統的,Windows和Linux就有所區別(Linux下優先級可能就被忽略了)~
Java提供的優先級默認是5,最低是1,最高是10。
setPriority0是一個本地(navite)的方法:
private native void setPriority0(int newPriority);
1.4線程生命週期
在上一篇介紹的時候其實也提過了線程的線程有3個基本狀態:執行、就緒、阻塞
Thread上不少的方法都是用來切換線程的狀態的,這一部分是重點!
1.4.1sleep方法
調用sleep方法會進入計時等待狀態,等時間到了,進入的是就緒狀態而並不是是運行狀態!
1.4.2yield方法
調用yield方法會先讓別的線程執行,可是不確保真正讓出
1.4.3join方法
調用join方法,會等待該線程執行完畢後才執行別的線程~
1.4.3interrupt方法
線程中斷在以前的版本有stop方法,可是被設置過期了。如今已經沒有強制線程終止的方法了!
因爲stop方法可讓一個線程A終止掉另外一個線程B
再次說明:調用interrupt()並非要真正終止掉當前線程,僅僅是設置了一箇中斷標誌。這個中斷標誌能夠給咱們用來判斷何時該幹什麼活!何時中斷由咱們本身來決定,這樣就能夠安全地終止線程了!
interrupt方法壓根是不會對線程的狀態形成影響的,它僅僅設置一個標誌位罷了
interrupt線程中斷還有另外兩個方法(檢查該線程是否被中斷):
若是阻塞線程調用了interrupt()方法,那麼會拋出異常,設置標誌位爲false,同時該線程會退出阻塞的。