Java筆記(四)線程

Java中的線程
一個程序的執行是爲進程,程序中單個順序的流控制成爲線程。
一個進程可以包括多個線程,他們共享內存,也就是多個線程訪問同一對象。對於CPU,他們以併發或者時間片的方式來分享CPU。

下面來介紹創建線程的兩種方法:
第一種是通過繼承Thread類創建線程

class MyThread extends Thread {
	public void run(){
		for(int i = 0;i<100;i++) {
			System.out.print(" " +i);
		}
	}

第二種是通過向Thread()構造方法傳遞Runnable對象來創建線程

class MyTask implements Runnable {
	public void run(){ .... }
	}
Thread thread = new Thread(mytask);
thread.start();

其實還有一種匿名類來實現Runnable

new Thread(){
	public void run(){
		...
	}
}.start();

下面來說明一下線程的狀態與生命週期:

在這裏插入圖片描述
我們在創建線程以後呢,調用start方法來跑這個線程,但他只是進入就緒狀態,並沒有開始運行,當系統空閒的時候會選擇開始線程,運行過程中要是遇到IO操作等就會進入阻塞狀態,運行完成後會終止。

線程還能分爲兩種,一種是普通線程,另一種是後臺線程
上面我們所創建的都是普通線程,線程不結束,程序就不會再結束。而後臺線程(Daemon)是等到所有普通線程都終止以後,他會自動終止,垃圾回收就是後臺線程。使用setDaemon(true);來設置後臺線程。

Java的同步
Java引入了對象互斥鎖,來保證共享數據操作的完整性。
每個對象都對應於一個monitor(監視器),包含一個標記,這個標記用來保證在任一時刻,只能有一個線程訪問該對象。

使用**wait()可以釋放對象鎖,使用notify()或notifyAll()**可以讓等待的一個或所有線程進入就緒狀態。

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