java線程知識普及掃盲篇(1)

1、進程與線程

        線程(Lightweight Process,LWP)被稱爲輕量級進程,看名字就可以知道與進程之間的關係。一個程序可以有多個任務,通常每個任務稱爲一個線程(thread)。線程與進程最本質的區別在於:進程有自己的獨立變量,線程則是共享數據。

 

2、創建線程

 

	public class MyrRun implements Runnable
	{
		public void run(){
			Runnable r = new MyrRun();
			Thread t = new Thread(r);
			t.start();
 		}
	}


3、線程狀態:

NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED。

1、NEW(新生):當剛創建一個進程,並未執行start的時候,改進程處於NEW狀態。

2、RUNNABLE(可運行):當一個進程調用start方法,就進入了RUNNABLE狀態。處於可運行狀態進程不一定是正在運行的,是否運行取決於系統分配給他的運行時間。

3、BLOCKED(被阻塞):當一個線程去申請內部對象鎖,但是這個鎖被其他線程所佔有,此時進入被阻塞狀態。

4、WAITING(等待):當一個線程等待另一個線程通知調度器一個條件是時。

5、TIMED_WAITING(記時等待):有些方法會傳遞超時參數,調用它們使得線程進入計時等待。

6、TERMINATED(終止):一個是run方法結束,自然死亡。另一個是捕獲異常導致線程終端。

 

API:

java.lang.Thread

thread.State getState():得到線程狀態。

 

3、進程調度

有兩種調度模型:分時調度模型和搶佔式調度模型。

  分時調度模型是指讓所有的線程輪流獲得cpu的使用權,並且平均分配每個線程佔用的CPU的時間片這個也比較好理解。

  java虛擬機採用搶佔式調度模型,是指優先讓可運行池中優先級高的線程佔用CPU,如果可運行池中的線程優先級相同,那麼就隨機選擇一個線程,使其佔用CPU。處於運行狀態的線程會一直運行,直至它不得不放棄CPU。

        因此,java想要明確進程運行狀態就需要用到一下方法:

  讓處於運行狀態的線程調用Thread.sleep()方法 (給予低級線程運行機會)

  讓處於運行狀態的線程調用Thread.yield()方法 (給予同等優先級的線程運行機會)

  讓處於運行狀態的線程調用另一個線程的join()方法(迫使進程處於阻塞狀態)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章