概述執行緒、執行緒建立
阿新 • • 發佈:2021-08-30
1.1 概述 執行緒介紹
-
多工
吃飯玩手機,開車打點滴,蹲坑打遊戲
現實中太多這樣同時做多件事情的例子了,看起來是多個任務都在做,其實本質上我們的大腦在同一時間依舊只做了一件事情。
-
多執行緒
道路窄,拓寬,多條路
收銀,多個收銀員
-
程式 程序(process) 執行緒(thread)
-
說起程序,就不得不說下程式。程式是指令和資料的有序集合,其本身沒有任何執行的含義,是—個靜態的概念。
-
而程序則是執行程式的一次執行過程,它是一個動態的概念。 是系統資源分配的單位
-
通常在一個程序中可以包含若干個執行緒,當然一個程序中至少有一個執行緒,不然沒有存在的意義。執行緒是CPU排程和執行的的單位。
-
◆執行緒就是獨立的執行路徑;
◆在一個程序中,如果開闢了多個執行緒,執行緒的執行由排程器安排排程,排程器是與作業系統緊密相關的,先後順序是不能人為的干預的。
◆對同一份資源操作時,會存在資源搶奪的問題,需要加入併發控制;
◆執行緒會帶來額外的開銷,如cpu排程時間,併發控制開銷。
◆每個執行緒在自己的工作記憶體互動,記憶體控制不當會造成資料不一致
1.2 執行緒建立
三種建立方式
Thread:
package com.zishi.lensson1;
//建立執行緒方式一:繼承Thread類,重寫run()方法,呼叫start開啟執行緒
public class TestThread1 extends Thread{
start()方法 同時進行
testThread1.run();
先執行run()執行緒
網圖下載
package com.zishi.lensson1;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//練習Thread,實現多執行緒同步下載圖片
public class TestThread2 extends Thread{
private String url;//網路圖片地址
private String name;//儲存的檔名
public TestThread2(String url, String name) {
this.url = url;
this.name = name;
}
//下載圖片執行緒的執行體
Runnable:
package com.zishi.lensson1;
//建立執行緒方式2: 實現Runnable介面,重寫run方法,
//執行執行緒需要丟入runnable介面實現類,呼叫start方法
public class TestThread3 implements Runnable{
start() 同步進行
Thread 實現了 Runnale
//建立執行緒物件,通過執行緒物件來開啟我們的執行緒,代理
// Thread thread = new Thread(testThread3);
// thread.start();
推薦使用Runnable介面
同一個物件被多執行緒使用 例子:
package com.zishi.lensson1;
//多執行緒同時操作同一個物件
//買火車票的例子
public class TestThread4 implements Runnable{
//票數
private int ticketNums = 10;
案例:龜兔賽跑
package com.zishi.lensson1;
//模擬龜兔賽跑
public class Race implements Runnable{
//勝利者
private static String winner;