JavaScript定時器型別總結
阿新 • • 發佈:2021-12-30
多執行緒 Java.Thread
1、執行緒簡介
程序和執行緒都是一個時間段的描述,是CPU工作時間段的描述。是執行中的程式指令的一種描述,這需要與程式中的程式碼區別開來。
電腦 = CPU + RAM +各種資源
電腦的執行 = CPU、暫存器、RAM的互動
-
CPU速度 >= 暫存器速度 >> RAM速度
-
若多個任務需要執行時,則輪流使用CPU(在不同的策略下輪流的概念有偏差),但因為CPU速度很快,所以在外界看來時同時進行。
-
在任何程式想要使用cpu之前,其他所需資源需要到位,處於就緒佇列中,用排程演算法呼叫執行
-
程序的上下文環境 = 程序執行時環境 = 除CPU以外的所有執行環境,(主要是暫存器)
-
先載入程序A的上下文,然後開始執行A,儲存程序A的上下文,調入下一個要執行的程序B的程序上下文,然後開始執行B,儲存程序B的上下文
程序和執行緒就是對應不同的CPU時間段的描述,執行緒共享同一程序的資源
程序是資源分配的最小單位
執行緒是CPU排程的最小單位
此處的執行緒指的是Java執行緒
2、執行緒的建立
名稱 | 屬性 | 簡介 |
---|---|---|
Thread | 類 | 繼承Thread類 |
Runnable | 介面 | 實現Runnable介面 |
Callable | 介面 | 瞭解Callable介面 |
優先順序:當某個執行緒中建立一個新的Thread物件時,新執行緒的優先順序=建立執行緒的優先順序
守護程序:守護程序能自動結束自己的生命週期,即便是有死迴圈也能輕鬆面對;
非守護程序:不能自動結束自己的生命週期,main程序就是一個典型的非守護程序
執行過程:主執行緒和子執行緒並行交替執行
注:執行緒不一定執行,看cpu排程安排
2.1、Thread建立執行緒
建立步驟:
-
建立一個新的類,用來繼承Thread
-
過載run方法
-
用start方法啟用該執行緒
public class TestThread extends Thread{ long prime; TestThread(long prime){ this.prime = prime; } @Override public void run() { this.prime += 1; System.out.println("該數已經加一"+this.prime); } public static void main(String[] args) { TestThread thread = new TestThread(15); thread.start(); } }
例項:
-
用commons-io包來多執行緒下載圖片
public class TestThread2 extends Thread{ String url; String fileName; TestThread2(String url, String fileName){ this.fileName = fileName; this.url = url; } @Override public void run() { WebDownload webDownload = new WebDownload(); webDownload.downloader(this.url,this.fileName); System.out.println("下載的檔名為"+this.fileName); } public static void main(String[] args) { TestThread2 thread = new TestThread2("https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" ,"1.jpg"); TestThread2 thread2 = new TestThread2("https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" ,"2.jpg"); TestThread2 thread3 = new TestThread2("https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" ,"3.jpg"); thread.start(); thread2.start(); thread3.start(); System.out.println("程式結束"); } }
class WebDownload{ public void downloader(String url, String fileName){ try { FileUtils.copyURLToFile(new URL(url),new File(fileName)); } catch (IOException e) { e.printStackTrace(); System.out.println("IO異常,downloader方法出現問題"); } } }
2.2、Runnable介面建立程序
建立步驟
-
建立一個新的類,用來實現Runnable介面
-
過載run方法
-
把新類物件作為建立Thread物件的實參
-
用Thread物件的start方法啟用該執行緒
public class TestRunnable implements Runnable{
long prime;
TestRunnable(long prime){
this.prime = prime;
}
@Override
public void run(){
this.prime += 1;
System.out.println("prime改變了嗎"+this.prime);
}
public static void main(String[] args) {
TestRunnable thread = new TestRunnable(10);
new Thread(thread).start();
}
}