1. 程式人生 > >Java多執行緒原理及Thread類的使用

Java多執行緒原理及Thread類的使用

一、程序與執行緒的區別

1.程序是應用程式在記憶體總分配的空間。(正在執行中的程式)

2.執行緒是程序中負責程式執行的執行單元、執行路徑。

3.一個程序至少有一個執行緒在負責程序的執行。

4.一個程序中有多個執行緒在執行的程式,為多執行緒程式。

5.多執行緒技術是為了解決多部分程式碼同時執行。

6.多執行緒的優點是合理的使用資源。

二、jvm中的多執行緒

1.jvm中的多執行緒有很多,其中有負責定義程式碼執行的執行緒(這個從main方法開始執行的主執行緒),也有垃圾回收的執行緒(因為CPU的切換的不確定所以不定時執行。或者達到某個條件下執行)。

2.多執行緒的執行的根據CPU的切換完成的,也就是說怎麼切換CPU說了算,所以多執行緒執行是隨機的(CPU快速切換造成的)。

3.每次執行結果不一定相同,因為隨機性造成的。

4.沒一個執行緒都有執行的程式碼內容。這個稱為執行緒的任務。建立一個執行緒就是為了去執行指定的任務程式碼。

三、建立多執行緒的方法

1.繼承Thread類.

2.覆蓋run( )方法。

3.建立子類物件、建立子類執行緒。

4.呼叫Thread類中的start( )方法,來執行執行緒。

start( )開啟執行緒後,都會執行run方法。說明run( )方法中儲存的是執行緒要執行的程式碼。所以自定義執行緒的任務程式碼都儲存在run( )方法中。

四、Thread.currentThread().getName()可以檢視當前正在執行執行緒的名稱

五、呼叫start( )和呼叫run( )方法的區別

呼叫start會開啟執行緒,讓開啟的執行緒去執行run( )方法中的執行緒任務。

直接呼叫run方法,執行緒並未開啟,去執行run方法的只有主執行緒。

六、多執行緒程式碼(一)

 1 //繼承多執行緒方法Thread
 2 class Demo extends Thread
 3 {
 4     private String name;
 5     Demo(String name)
 6     {
 7         this.name = name;
 8     }
 9     //重寫run( )方法
10 public void run() 11 { 12 show(); 13 } 14 //需要執行的show( )方法 15 public void show() 16 { 17 for (int x=1;x<=10;x++) 18 { 19 System.out.println(name+"x ="+x); 20 } 21 } 22 } 23 24 class ThreadDemo 25 { 26 public static void main(String[] args) 27 { 28 Demo d1 = new Demo("xianghong"); 29 Demo d2 = new Demo("xiaoming"); 30 //開啟執行緒,呼叫run( )方法 31 d1.start(); 32 d2.start(); 33 //需要執行的主執行緒 34 for (int x=1; x<=10; x++) 35 { 36 System.out.println("main......"+x); 37 } 38 } 39 }

 執行結果

 

 七、多執行緒程式碼(二)

 1 //繼承多執行緒方法Thread
 2 class Demo extends Thread
 3 {
 4     private String name;
 5     Demo(String name)
 6     {
 7         this.name = name;
 8     }
 9     //重寫run( )方法
10     public void run()
11     {
12         show();
13     }    
14     //需要執行的show( )方法
15     public void show()
16     {
17         for (int x=1;x<=10;x++)
18         {
19             //getName()顯示的是預設的名稱
20             //System.out.println(getName()+"..."+name+"x ="+x);
21             //Thread.currentThread().getName()當前正在執行執行緒的名稱
22             System.out.println(Thread.currentThread().getName()+"..."+name+"x ="+x);
23         }
24     }
25 }
26 
27 class ThreadDemo
28 {
29     public static void main(String[] args)
30     {
31         Demo d1 = new Demo("xianghong");
32         Demo d2 = new Demo("xiaoming");
33         //開啟執行緒,呼叫run( )方法
34         d1.start();
35         d2.start();
36         //需要執行的主執行緒
37         for (int x=1; x<=10; x++)
38         {
39             System.out.println(Thread.currentThread().getName()+"......"+x);
40         }
41     }
42 }

執行結果