JAVA多線程學習筆記什麼是線程

【進程與線程】

1、操作系統在執行一個程序時,會自動建立一個‘進程’,這個進程中,至少包含一個線程(這個線程被稱爲主線程),來作爲程序入口。

2、操作系統運行中,會產生很多個‘進程’,這些進程不共享內存;而每個進程佔有的內存,卻可以被這個進程中不同的‘線程’所共享;另外,這些線程不僅共享這段內存,每個線程還可有一個屬於它自己的內存空間——線程棧,這是線程建立時,操作系統分配的,用來保存線程數據。

3、線程總是屬於某個進程,進程中的多個線程共享進程的內存。

4、進程被分爲多個線程後,這些線程可以併發執行(並不是真正意義上的併發,而是線程調度造成的假象,詳情參考相關操作系統教程)。


【JAVA線程】

1、由於Java是純面嚮對象語言,因此,Java的線程模型也是面向對象的,Java通過Thread類將線程所必須的功能都封裝了起來。

2、如果想運行自己的線程執行函數,那就要覆蓋Thread類的run方法,即,繼承Thread類,重寫類裏面的run()方法,run()裏面寫你要執行的代碼。如下:

public class MyThread extends Thread
{
	
	public void run()
	{
		
         //你的代碼
		
	}
}

3、執行的時候,實例化MyThread,然後調用start()方法;start方法負責建立線程,調用start方法後,如果線程建立成功,會自動調用Thread類的run方法,即開始執行你的代碼。如下:

public static void main(String[] arg0)
{
	MyThread myThread = new MyThread();
        myThread.start();
}

4、除了Thread類,還有一個標識某個Java類是否可作爲線程類的接口Runnable,這個接口只有一個抽象方法run,也就是Java線程模型的線程執行函數。一個線程類的唯一標準就是這個類是否實現了Runnable接口的run方法,也就是說,擁有線程執行函數的類就是線程類。


5、通過繼承Thread類來建立線程,雖然在實現起來更容易,但由於Java不支持多繼承,如果這個線程類繼承了Thread,就不能再繼承其他的類了。因此,Java線程模型提供了通過實現Runnable接口的方法來建立線程,這樣線程類可以在必要的時候繼承和業務有關的類,而不是Thread類。

6、Runnable例子:

public class MyThread implements Runnable
{
	public void run()
	{
		//your code
	}	
}

public static void main(String[] args) { 
	
	MyThread myThread1 = new MyThread(); 
	MyThread myThread2 = new MyThread(); 

    Thread t1 = new Thread(myThread1); 
    Thread t2 = new Thread(myThread2); 

    t1.start(); 
    t2.start(); 
} 


【Thread類的構造方法】

1、在使用Runnable接口時需要建立一個Thread實例,因此,無論是通過Thread類還是Runnable接口建立線程,都必須建立Thread類或它的子類的實例。Thread類的構造方法被重載了八次,構造方法如下:

public Thread();
public Thread(Runnable target);
public Thread(String name);
public Thread(Runnable target, String name);
public Thread(ThreadGroup group, Runnable target);
public Thread(ThreadGroup group, String name);
public Thread(ThreadGroup group, Runnable target, String name);
public Thread(ThreadGroup group, Runnable target, String name, long stackSize);


Runnable target

實現了Runnable接口的類的實例。要注意的是Thread類也實現了Runnable接口,因此,從Thread類繼承的類的實例也可以作爲target傳入這個構造方法。

String name

線程的名子。這個名子可以在建立Thread實例後通過Thread類的setName方法設置。如果不設置線程的名子,線程就使用默認的線程名:Thread-NN是線程建立的順序,是一個不重複的正整數。

ThreadGroup group

當前建立的線程所屬的線程組。如果不指定線程組,所有的線程都被加到一個默認的線程組中。關於線程組的細節將在後面的章節詳細討論。

long stackSize

    線程棧的大小,這個值一般是CPU頁面的整數倍。如x86的頁面大小是4KB。在x86平臺下,默認的線程棧大小是12KB


2、在調用start方法前後都可以使用setName設置線程名,但在調用start方法後使用setName修改線程名,會產生不確定性。



Reference:

http://www.blogjava.net/nokiaguy/archive/2009/03/07/258358.html         李寧的極樂世界-JAVA多線程初學者指南


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