cpu調度的最小單位,一個進程每每由一個或多個線程組成,線程中的通訊容易同步複雜,線程崩潰可能會影響整個程序的穩定性,可靠性低。java
案例:ide
public class Demo01 { //繼承Thread類 public static class MyThread extends Thread{ //重寫run方法 @Override public void run() { System.out.println("MyThread"); } } public static void main(String[] args) { //實現 Thread th=new MyThread(); //啓動 th.start(); } }
啓動過程:建立對象後,線程變成新建態,當調用start方法線程進入就緒態,得到cpu使用權後,線程進入運行態,執行完成後線程死亡。
異常分析:重複調用start則會拋出異常
函數
JDK源碼:源碼分析
@FunctionalInterface public interface Runnable { public abstract void run(); }
案例:this
public class Demo02 { //實現Runnable接口 public static class MyThread implements Runnable{ //實現run方法 @Override public void run() { // TODO Auto-generated method stub System.out.println("MyThread"); } } public static void main(String[] args) { // TODO Auto-generated method stub Thread th=new Thread(new MyThread()); th.start(); } }
JDK源碼:spa
// Thread類源碼 // ⽚段1 - init⽅法 private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc, boolean inheritThreadLocals) // ⽚段2 - 構造函數調⽤init⽅法 public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); } // ⽚段3 - 使⽤在init⽅法⾥初始化AccessControlContext類型的私有屬性 this.inheritedAccessControlContext = acc != null ? acc : AccessController.getContext(); // ⽚段4 - 兩個對⽤於⽀持ThreadLocal的私有屬性 ThreadLocal.ThreadLocalMap threadLocals = null; ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;
init方法中參數分析:
ThreadGroup g:線程組,指定改線程歸屬於哪一個線程組
Runnable target:執行的任務
String name:線程名
acc:⽤於初始化私有變量 inheritedAccessControlContext。
inheritThreadLocals:可繼承的ThreadLocal線程
//建立一個線程,參數能夠是一個實現Runnable接口的類 Thread(Runnable target) //建立一個指定線程名的線程 Thread(Runnable target,String name)
currentThread():靜態⽅法,返回對當前正在執⾏的線程對象的引⽤。
start():開始執行線程的方法,java虛擬機調用線程中的run方法。
sleep:靜態方法,讓線程睡眠,時間單位是毫秒,不會放棄對象鎖。
yield:中文意思放棄,會讓線程放棄cpu使用權,從運行態轉換爲就緒態,這⾥須要注意的是,就算當前線程調⽤了yield()
⽅法,程序在調度的時候,也還有可能繼續運⾏這個線程的。
join:使當前線程等待指定線程執行結束以後執行,內部調用Object的wait方法實現。code
Runnable屬於接口,使用起來比Thread更加靈活。
Runnable更加符合面向對象,將線程進行單獨的封裝。
Runnable接口下降了線程對象和線程任務的耦合性。
Runnable沒有Thread那麼多的方法,更爲輕量。
在使用時Runnable接口的優先級更高。對象