什麼是線程
在討論什麼是線程前有必要先說下什麼是進程,因爲線程是進程中的一個實體,線程本身是不會獨立存在的。進程是代碼在數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,線程則是進程的一個執行路徑,一個進程至少有一個線程,進程中的多個線程是共享進程的資源的。
如何啓動新的進程
①建立Runnable對象(線程的任務)
Runnable threejob = new myRunnable();
②建立Trhead對象(執行人工)並賦值Runnable任務
Thread thread = new Thread(threejob);
③啓動Thread
thread.start();
④實現Runnable接口來建立thread運行的任務,Runnable只有一個方法需要實現,就是run方法,
class myRunnable implements Runnable {
@Override
public void run() {
go();
}
public void go() {
System.out.println("top the stack ");
}
}
新建線程的幾種狀態
①新建狀態
②可執行狀態:當你啓動線程的時候,他就會變成可執行的狀態,只要輪到他就可以開始,該線程已經佈置好執行空間
③執行中:這靠Java虛擬機的線程調度機制來決定,只能給Java虛擬機的調度給點意見,但無法強迫線程從可執行狀態變成執行中
注意:一旦線程進入可執行狀態,他會在可執行狀態中與執行中狀態來來去去,同時也會有另外一種狀態:暫時不可執行(堵塞狀態)
線程調度器
線程調度器會決定哪個線程從等待狀態中被挑出來運行,以及何時把哪個線程送回等待執行的狀態
看下面例子:
package Java;
class myRunnable implements Runnable {
@Override
public void run() {
go();
}
public void go() {
System.out.println("top the stack ");
}
}
public class ThreadTester {
public static void main(String[] agrs) {
Runnable threejob = new myRunnable();
Thread thread = new Thread(threejob);
thread.start();
System.out.println("back the main");
}
}
輸出順序是隨機的
讓進程小睡一會
確保進程能夠有機會的執行的最好方式是讓他們週期性的去睡一下,只要調用sleep()方法,傳入一毫秒指定的時間即可,但是這個方法會拋出異常InterruptedException,
try {
Thread.sleep(2000);
}catch(InterruptedException ex){
ex.printStackTrace();
}