Java多執行緒的建立和啟動

pengfoo發表於2012-10-08

參考:李剛《瘋狂java講義》

執行緒的建立和啟動

一、    繼承Thread類建立並啟動多執行緒

步驟:

1.    定義Thread類的子類,並重寫該類的run方法,run方法的方法體代表了執行緒要執行的任務;

2.    建立Thread類的子類的例項,即建立了執行緒物件;

3.    用執行緒物件的start方法來啟動執行緒。

程式碼示例:

//通過繼承Thread類來建立執行緒類
public class Test extends Thread
{
	private int i ;
	//重寫run方法,run方法的方法體就是執行緒執行體
	public void run()
	{
		for ( ; i < 20 ; i++ )
		{
			//當執行緒類繼承Thread類時,可以直接呼叫getName()方法來返回當前執行緒的名。
			//如果想獲取當前執行緒,直接使用this即可
			//Thread物件的getName返回當前該執行緒的名字
			System.out.println(getName() +  " " + i);
		}
	}
	
    public static void main(String[] args) 
    {
        for (int i = 0; i < 20;  i++)
        {
                        //呼叫Thread類的靜態方法currentThread獲取當前執行緒物件,例項的getName獲得執行緒名
			System.out.println(Thread.currentThread().getName() +  " " + i);
			if (i == 6)
			{
				//建立、並啟動第一條執行緒
				new Test().start();
				//建立、並啟動第二條執行緒
				new Test().start();
			}
        }
    }
}


輸出為:

main 0

main 1

main 2

main 3

main 4

main 5

main 6

Thread-0 0

Thread-0 1

Thread-0 2

Thread-0 3

Thread-0 4

Thread-0 5

Thread-0 6

Thread-0 7

Thread-0 8

Thread-0 9

Thread-0 10

Thread-0 11

Thread-0 12

Thread-0 13

Thread-0 14

Thread-0 15

Thread-0 16

Thread-0 17

Thread-0 18

Thread-0 19

main 7

main 8

main 9

main 10

main 11

main 12

main 13

main 14

main 15

main 16

main 17

main 18

main 19

Thread-1 0

Thread-1 1

Thread-1 2

Thread-1 3

Thread-1 4

Thread-1 5

Thread-1 6

Thread-1 7

Thread-1 8

Thread-1 9

Thread-1 10

Thread-1 11

Thread-1 12

Thread-1 13

Thread-1 14

Thread-1 15

Thread-1 16

Thread-1 17

Thread-1 18

Thread-1 19

 

一、    實現runnable介面建立執行緒類

1.    定義runnable介面的實現類,重寫該介面的run方法;

2.    建立runnable實現類的例項,並以此例項作為Threadtarget來建立Thread物件,該Thread物件才是真正的執行緒物件。

3.    用執行緒物件的start方法來啟動執行緒。

例項程式碼:

//通過實現Runnable介面來建立執行緒類
public class Test implements Runnable
{
	private int i ;
	//run方法同樣是執行緒執行體
	public void run()
	{
		for ( ; i < 100 ; i++ )
		{
			//當執行緒類實現Runnable介面時,
			//如果想獲取當前執行緒,只能用Thread.currentThread()方法。
			System.out.println(Thread.currentThread().getName() + "  " + i);
		}
	}
	
    public static void main(String[] args) 
    {
        for (int i = 0; i < 100;  i++)
        {
			System.out.println(Thread.currentThread().getName() + "  " + i);
			if (i == 20)
			{
				Test st = new Test();
				//通過new Thread(target , name)方法建立新執行緒
				new Thread(st , "新執行緒1").start();
				new Thread(st , "新執行緒2").start();
			}
        }
    }
}

從輸出可以看到,兩個執行緒的變數i的變化時連續的,也就是使用runnable介面的執行緒可以共享執行緒類的例項屬性,因為在這種情況下,程式建立的runnable物件只是執行緒的target,而多條執行緒可以共享一個target,所以執行緒可以共享執行緒類的例項屬性(實際上是執行緒的target類)。

 

 

 

 

相關文章