Java多線程原理及Thread類的使用

1、進程與線程的區別

1.進程是應用程序在內存總分配的空間。(正在運行中的程序)多線程

2.線程是進程中負責程序執行的執行單元、執行路徑。jvm

3.一個進程至少有一個線程在負責進程的運行。this

4.一個進程中有多個線程在運行的程序,爲多線程程序。spa

5.多線程技術是爲了解決多部分代碼同時執行。線程

6.多線程的優勢是合理的使用資源。code

2、jvm中的多線程

1.jvm中的多線程有不少,其中有負責定義代碼運行的線程(這個從main方法開始執行的主線程),也有垃圾回收的線程(由於CPU的切換的不肯定因此不定時執行。或者達到某個條件下執行)。對象

2.多線程的運行的根據CPU的切換完成的,也就是說怎麼切換CPU說了算,因此多線程運行是隨機的(CPU快速切換形成的)。blog

3.每次運行結果不必定相同,由於隨機性形成的。繼承

4.沒一個線程都有運行的代碼內容。這個稱爲線程的任務。建立一個線程就是爲了去運行指定的任務代碼。進程

3、建立多線程的方法

1.繼承Thread類.

2.覆蓋run( )方法。

3.建立子類對象、建立子類線程。

4.調用Thread類中的start( )方法,來執行線程。

start( )開啓線程後,都會執行run方法。說明run( )方法中存儲的是線程要運行的代碼。因此自定義線程的任務代碼都存儲在run( )方法中。

4、Thread.currentThread().getName()能夠查看當前正在運行線程的名稱

5、調用start( )和調用run( )方法的區別

調用start會開啓線程,讓開啓的線程去執行run( )方法中的線程任務。

直接調用run方法,線程並未開啓,去執行run方法的只有主線程。

6、多線程代碼(一)

 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 }

 執行結果

 

 7、多線程代碼(二)

 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 }

執行結果

相關文章
相關標籤/搜索