1. 程式人生 > >復習多線程

復習多線程

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對象

復習多線程