多執行緒的概述與建立

2022-09-14 23:21:21 字數 3108 閱讀 7333

程序是程式的一次執行過程,或是正在執行的乙個程式。是動態過程:有自身的產生、存在和消亡的過程。

執行緒是由程序建立的,是程序的乙個實體

乙個程序可以擁有多個執行緒

單執行緒:同一時刻,只執行執行乙個執行緒。

多執行緒:同一時刻,可以執行多個執行緒。

併發:同一時刻,多個任務交替執行,造成一種「貌似同時」的錯覺,簡單理解就是單核cpu實現的多執行緒就是併發

如:乙個cpu對應qq和vx兩個應用,那麼系統在執行的時候是交替執行的,只是交替時間短

並行:同一時刻,多個任務同時執行,多核cpu可以實現並行

如:如乙個cpu對應乙個qq,另外乙個cpu對應vx,那麼系統在執行的時候就是兩個cpu同時進行

注意:多核cpu可能存在併發和並行都有的情況。

1、繼承thread類,重寫run方法

2、實現runnable介面,重寫run方法

要求:1、編寫乙個程式,開啟乙個執行緒,該執行緒每隔1秒。在控制台輸出「喵,我是小貓」

2、對上題改進:當輸出10次後,結束執行緒

3、使用jconsole監控執行緒執**況,並畫出程式示意圖。

/** * @author 喂s別鬧

* @create 2021/11/9-9:13

* @version 1.0

* @description:通過thread類實現小貓題

*/public class thread1

}//當乙個類繼承了thread類,那麼該類就是乙個執行緒

//run方法 thread類是實現了runnable介面run方法

// @override

// public void run()

// }

// 上面的**是thread重寫runnable的run方法

static class cat extends thread catch (interruptedexception e)

if (times == 10) }}

}}注意:start()方法和run方法:

.start(); 最終執行cat的run方法

.run() //run方法就是乙個普通的方法 沒有開啟新的執行緒,就會自頂向下的執行下去,run執行完畢才繼續向下執行

start()方法呼叫了start0()方法後,該執行緒並不一定會立馬執行,只是將執行緒變成了可執行狀態。具體什麼時候執行,取決於cpu,由cpu統一排程

1、j**a是單繼承,在某些情況下乙個類可能已經繼承了某個父類,在這時用繼承thread類方法來建立執行緒就不可能了

2、j**a設計者提供了另外乙個方式建立執行緒,就是通過實現runnable介面來建立執行緒

案例:請編寫程式,該程式可以每隔1秒。在控制台輸出「hi!」,當輸出10次後,自動退出。請使用實現runnable介面的方式實現. 這是靜態**模式!

public class runnable1 

static class dog implements runnable catch (interruptedexception e)

if (count == 10) }}

}}

案例:編寫乙個程式,建立兩個執行緒,乙個執行緒每隔1秒輸出「hello world」,輸出10次,退出,乙個執行緒每隔1秒輸出「hi」輸出5次後退出。

public class thread2 

static class t1 implements runnable catch (interruptedexception e)

if (count == 8) }}

}static class t2 implements runnable catch (interruptedexception e)

if (count == 6) }}

}}

從j**a的設計來說,繼承thread或者實現runnable介面來建立執行緒沒有本質區別,從jdk文件知道thread類本身就是實現了runnable介面實現runnable介面方式更加合適多個執行緒共享乙個資源的情況,並且避免了單繼承的限制,建議使用runnable介面案例:模擬三個售票視窗售票100,分別使用繼承thread和實現runnable方式,並分析問題分析:都會被髒讀

會賣到102張

public class sellticket 

//使用thread類

static class sellticket01 extends thread

//休眠

try catch (interruptedexception e)

system.out.println("視窗 " + thread.currentthread().getname() + " 賣出了一張票 " + "還剩" + (--ticketnum) + "張票");}}

}//實現runnable介面

static class sellticket02 implements runnable

//休眠

try catch (interruptedexception e)

system.out.println("視窗 " + thread.currentthread().getname() + " 賣出了一張票 " + "還剩" + (--ticketnum) + "張票");}}

}}

執行緒的建立與多執行緒

多執行緒執行緒建立的方式 一 使用此方式建立的執行緒為守護執行緒 import thread import threading deffn1 a,b print a,b print threading.current thread name defcreate thread1 引數一 在子執行緒中要...

多執行緒整理01 多執行緒概述

什麼是程式?程式是一段由作業系統執行的 什麼是程序?程序是程式執行的過程,或者說正在被執行的一道程式,乙個程序由乙個或者多個執行緒組成 什麼是執行緒?執行緒是程序的執行部分,每個執行緒都有各自的堆疊空間,堆疊是私有的,而執行緒共享程序內的其他資源 什麼是併發和並行 併發 如果只有單個cpu的話,程式...

android 多執行緒概述

android多執行緒,一直是乙個麻煩的事情,要掌握它的本質,我們需要搞清楚乙個問題,linux多執行緒的本質。了解linux的歷程,了解android的非同步任務機制,了解android的多步任務。說到linux的多執行緒,我們要比較windows與linux的多執行緒的模型。windows執行緒...