歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 創建線程的兩種方式

創建線程的兩種方式

日期:2017/3/1 9:10:19   编辑:Linux編程

首先我們需要知道什麼是線程:是程序執行流的最小單元,包括就緒、阻塞和運行三種基本狀態。

舉個簡單的例子:我們把生活中的兩件事吃飯和寫作業當作是兩個線程,當你正在寫作業的時候,爸媽叫你吃飯,你就直接去了,等吃完飯回來後再接著寫作業。這就是相當於兩個線程其中一個從運行狀態轉入就緒狀態,另一個線程從就緒狀態轉入運行狀態。

創建線程包括繼承Thread類和實現Runnable接口兩種方式(JDK5.0以後還包括了實現Callable等方式來實現線程,這裡不做介紹,感興趣的小伙伴可以自己查資料),下面介紹第一種創建線程的方式(通過繼承Thread類):

 1 package com.test.thread;
 2 
 3 public class EasyThread extends Thread {
 4     private String name;
 5     public EasyThread(String name) {
 6         this.name=name;
 7     }
 8     //重寫父類Thread中的run方法
 9     @Override
10     public void run() {
11         for (int i = 0; i <2; i++) {
12             System.out.println(name+"運行"+i);
13             try {
14                 //隨機設置休眠時間
15                 sleep((int)Math.random()*10);
16             } catch (InterruptedException e) {
17                 e.printStackTrace();
18             }
19         }
20     };
21 
22     public static void main(String[] args) {
23         //創建一個線程
24         EasyThread thread1=new EasyThread("線程1");
25         //啟動線程(啟動線程後會執行上面的run方法)
26         thread1.start();
27         EasyThread thread2=new EasyThread("線程2");
28         thread2.start();
29     }
30 
31 }

多次運行上述代碼,查看運行結果,你會發現可能每次的輸出結果可能與上次相同也可能不同。因為休眠時間不同,導致運行的結果不盡相同,可以好好體會一下。下面講述第二種創建線程的方式(實現Runnable接口):

 1 package com.test.thread;
 2 
 3 public class ImpRunnable implements Runnable {
 4     private String name;
 5 
 6     public ImpRunnable(String name) {
 7         this.name = name;
 8     }
 9 
10     // 實現接口Runnable中的run方法
11     @Override
12     public void run() {
13         for (int i = 0; i < 2; i++) {
14             System.out.println(name + "運行" + i);
15             try {
16                 // 隨機設置休眠時間
17                 Thread.sleep((int) Math.random() * 10);
18             } catch (InterruptedException e) {
19                 e.printStackTrace();
20             }
21         }
22     };
23 
24     public static void main(String[] args) {
25         // 創建線程並啟動(與第一種方法略有不同)
26         new Thread(new ImpRunnable("線程1")).start();
27         new Thread(new ImpRunnable("線程2")).start();
28     }
29 }

以上即為實現線程的兩種常用的方式,在使用多線程(多個人共同完成同一個任務)的時候我們一般用實現Runnable接口的方式,關於兩者之間具體的區別感興趣的小伙伴可以自行查閱資料

Copyright © Linux教程網 All Rights Reserved