Java 的線程是經過java.lang.Thread類來實現的。VM啓動時會有一個由主方法所定義的線程。能夠經過建立Thread的實例來建立新的線程。每一個線程都是經過某個特定Thread對象所對應的方法run()來完成其操做的,方法run()稱爲線程體。經過調用Thread類的start()方法來啓動一個線程。html
在Java 當中,線程一般都有五種狀態,建立、就緒、運行、阻塞和死亡。
第一是建立狀態。在生成線程對象,並無調用該對象的start方法,這是線程處於建立狀態。
第二是就緒狀態。當調用了線程對象的start方法以後,該線程就進入了就緒狀態,可是此時線程調度程序尚未把該線程設置爲當前線程,此時處於就緒狀態。在線程運行以後,從等待或者睡眠中回來以後,也會處於就緒狀態。
第三是運行狀態。線程調度程序將處於就緒狀態的線程設置爲當前線程,此時線程就進入了運行狀態,開始運行run函數當中的代碼。
第四是阻塞狀態。線程正在運行的時候,被暫停,一般是爲了等待某個時間的發生(好比說某項資源就緒)以後再繼續運行。sleep,suspend,wait等方法均可以致使線程阻塞。
第五是死亡狀態。若是一個線程的run方法執行結束或者調用stop方法後,該線程就會死亡。對於已經死亡的線程,沒法再使用start方法令其進入就緒。java
記住:多線程就是分時利用CPU,宏觀上讓全部線程一塊兒執行 ,也叫併發。多線程
public class Test { public static void main(String[] args) { Runner1 runner1 = new Runner1(); Runner2 runner2 = new Runner2(); // Thread(Runnable target) 分配新的 Thread 對象。
Thread thread1 = new Thread(runner1); Thread thread2 = new Thread(runner2); // thread1.start(); // thread2.start();
thread1.run(); thread2.run(); } } class Runner1 implements Runnable { // 實現了Runnable接口,jdk就知道這個類是一個線程
public void run() { for (int i = 0; i < 100; i++) { System.out.println("進入Runner1運行狀態——————————" + i); } } } class Runner2 implements Runnable { // 實現了Runnable接口,jdk就知道這個類是一個線程
public void run() { for (int i = 0; i < 100; i++) { System.out.println("進入Runner2運行狀態==========" + i); } } }