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類調用,獲取當前所處代碼塊對應的線程對象。