Java線程使用

Java線程使用

1. 多線程

1.1 多線程的優缺點
優點
	1. 提升資源利用率
	2. 提高用戶體驗

缺點:
	1. 降低了其他線程的執行概率
	2. 用戶會感受到軟件的卡頓問題
	3. 增加的系統,資源壓力
	4. 多線程情況下的共享資源問題,線程衝突,線程安全問題
1.2 創建自定義線程類的兩種方式
class Thread類
	Java中的一個線程類
	Thread類是Runnable接口的實現類,同時提供了很多線程的操作使用的方法。
	
interface Runnable接口
	這裏規定了what will be run?
	裏面只有一個方法 run方法

方式一:
	自定義線程類,繼承Thread類,重寫run方法
	創建自定義線程對象,直接調用start方法,開啓線程
	
方式二:
	自定義線程類,遵從Runnable接口
	使用自定義遵從接口Runnable實現類對象,作爲Thread構造方法參數
	藉助於Thread類對象和start方法,開啓線程

【推薦】
	以上兩種方式,推薦使用方拾二,遵從Runnable接口來完成自定義線程,不影響正常的繼承邏輯,並且可以使用匿名內部類來完成線程代碼塊的書寫

package com.qfedu.a_thread;

/*
 * 自定義線程類MyThread1繼承Thread類
 */
class MyThread1 extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("繼承Thread類自定義線程類");
		}
	}
}

/*
 * 自定義線程類MyThread2遵從Runnable接口
 */
class MyThread2 implements Runnable {

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("遵從Runnable接口實現自定義線程類");
		}
	}
}

public class Demo1 {
	public static void main(String[] args) {
		new Thread(new Runnable() {

			@Override
			public void run() {
				for (int i = 0; i < 100; i++) {
					System.out.println("匿名內部類方式創建對象,作爲線程執行代碼");
				}
			}
		}).start();
		// 創建一個繼承Thread類自定義線程類對象
		MyThread1 myThread1 = new MyThread1();
		// 這裏不是啓動線程,而且將run方法做出一個普通方法執行。
		// myThread1.run();
		myThread1.start();
		
		// 創建一個Thread類對象,使用遵從Runnable接口的實現類作爲構造方法參數
		Thread thread = new Thread(new MyThread2());
		// 藉助於Thread類內的start方法開啓線程
		thread.start();

		for (int i = 0; i < 100; i++) {
			System.out.println("main線程");
		}
	}
}
1.3 自定義線程執行流程簡述

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3DOr89f8-1583140613558)(img/自定義線程執行流程簡述.png)]

1.4 Thread類需要了解的方法
構造方法 Constructor
	Thread();
		分配一個新的線程對象,無目標,無指定名字
	Thread(Runnable target);
		創建一個新的線程對象,並且在創建線程對象的過程中,使用Runnable接口的實現類
		對象作爲執行的線程代碼塊目標
	Thread(String name);
		創建一個新的線程,無指定目標,但是指定當前線程的名字是什麼
	Thread(Runnable target, String name);
		創建一個線程的線程對象,使用Runnable接口實現類對象,作爲執行目標,並且指定
		name作爲線程名
	
成員方法:
	void setName(String name);
	String getName();
		以上兩個是name屬性setter和getter方法
	void setPriority(int Priority);
		設置線程的優先級,非一定執行要求,只是增加執行的概率
		優先級數值範圍 [1 - 10] 10最高 1最低 5默認
	int getPriority();
		獲取線程優先級
	void start();
		啓動線程對象
	
	public static void sleep(int ms);
		當前方法是靜態方法,通過Thread類調用,要求是當前所在線程代碼塊對應的線程,
		進行休眠操作,休眠指定的毫秒數
	public static Thread currentThread();
		當前方法是靜態方法,通過Thread類調用,獲取當前所處代碼塊對應的線程對象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章