程序是程式的一次執行過程,或是正在執行的乙個程式。是動態過程:有自身的產生、存在和消亡的過程。
執行緒是由程序建立的,是程序的乙個實體
乙個程序可以擁有多個執行緒
單執行緒:同一時刻,只執行執行乙個執行緒。
多執行緒:同一時刻,可以執行多個執行緒。
併發:同一時刻,多個任務交替執行,造成一種「貌似同時」的錯覺,簡單理解就是單核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執行緒...