復習多線程
阿新 • • 發佈:2018-06-14
ride ont 效率 基本上 註意 輸入 不能 系統 nts
復習目標:
(1)線程與進程
(2)為什幺使用多線程
(3)多線程應用場景
(4)常用的多線程創建方式
(5)線程生命周期
線程與進程的區別:
每一個在系統上運行的程序都是一個進程。每個進程包含一到多個線程。線程是一組指令的集合,它可以在程序裏獨立執行。線程基本上是輕量級的進程,它負責在單個程序裏執行多任務。
使用多線程可以把占據時間長的程序中的任務放到後臺去處理,是程序運行速度加快。在一些等待的任務實現上如:用戶輸入、文件讀寫和網絡收發數據等。
如果有大量的線程,會影響性能,因為操作系統需要在它們之間切換,更多的線程需要更多的內存空間,線程的終止需要考慮其對程序運行的影響。需要防止線程死鎖的情況。
總結:進程是所有線程的集合,每一個線程是進程中的一條執行路徑。
為什幺要使用多線程:
為了提高程序的效率。
多線程應用場景:
主要能體現到多線程提高程序效率。舉例: 迅雷多線程下載、分批發送短信等
常用的多線程創建方式:
第一種繼承Thread類,重寫run方法
class CreateThread extends Thread{ public void run(){ for(int i=0;i<10;i++){ System.out.println("i:"+i); } } } public class ThreadDemo { public static void main(String[] args) { System.out.println("---多線程創建開始-----"); //1.創建一個線程 CreateThread createThread=new CreateThread(); //2.開始執行線程 註意:開始線程不是調用run方法,而是start方法 System.out.println("---多線程創建啟動---"); createThread.start(); System.out.println("---多線程創建結束-----"); } }
調用start方法後,代碼並沒有從上往下執行,而是有一條新的執行分之。
第二種實現Runnable接口,重寫run方法
class CreateRunnable implements Runnable{ @Override public void run() { for (int i = 0; i< 10; i++) { System.out.println("i:" + i); } } } public class ThreadDemoTwo { public static void main(String[] args) { System.out.println("-----多線程創建開始-----"); CreateRunnable createThread=new CreateRunnable(); System.out.println("-----多線程創建啟動-----"); Thread thread=new Thread(createThread); thread.start(); System.out.println("-----多線程創建結束-----"); } }
第三種使用匿名內部類方式
public static void main(String[] args) { System.out.println("--多線程創建開始---"); Thread thread=new Thread(new Runnable(){ @Override public void run() { for (int i = 0; i< 10; i++) { System.out.println("i:" + i); } } }); thread.start(); System.out.println("--多線程創建結束----"); }
使用繼承Thread類好還是實現Runnable接口好?
使用實現Runnable接口好,因為實現了接口還可以繼承,繼承了類就不能再繼承了。
啟動線程是使用調用start方法還是run方法?
開始線程不是調用run方法,而是start方法。
獲取線程對象以及名稱
常用i線程api方法 |
|
start() | 啟動線程 |
currentThread() | 獲取當前線程對象 |
getID() | 獲取當前線程id Thread-編號 該編號從0開始 |
gatName() | 獲取當前線程名稱 |
sleep(long mill) | 休眠線程 |
Stop() | 停止線程 |
常用線程構造函數 | |
Thread() | 分配一個新的Thread對象 |
Thread(String name) | 分配一個新的Thread對象,具有指定的name正如其名 |
Thread(Runnable r) | 分配一個新的Thread對象 |
Thread(Runnable r,String name) | 分配一個新的Thread對象 |
復習多線程