Java執行緒的實現

2021-09-19 09:28:35 字數 1079 閱讀 2095

乙個執行緒的啟動是需要通過thread.start()方法來完成的(也只有start才完成乙個執行緒的真正建立,new thread不算),這個方法會呼叫本地方法jni來實現乙個真正意義上的執行緒,或者說只有start成功呼叫後由os分配執行緒資源,才能叫做執行緒,而在jvm中分配的thread物件只是與只對應的外殼。

執行緒為輕量級程序,多個執行緒共享乙個程序資源,對於os的許多資源的分配和管理(例如記憶體)通常都是程序級別的,執行緒只是os排程的最小單位,執行緒相對程序更加輕量一些,它的上下文資訊會更少,它的建立與銷毀會更加簡單,執行緒因為某種原因掛起後不會導致整個程序被掛起,乙個程序中又可以分配許多的執行緒。但是某個執行緒占用過多資源會導致整個程序宕機。執行緒使用的是堆外記憶體空間。

start方法怎麼啟動執行緒的:

klt是核心執行緒,核心執行緒由os直接完成排程切換,它相對應用程式的執行緒來講只是乙個介面,外部程式會使用一種輕量級程序(light weight process,lwp)來與klt進行一對一的介面呼叫。也就是說,程序內部會嘗試利用os的核心執行緒去參與實際的排程,而自己使用api呼叫作為中間橋梁與自己的程式進行互動。

是否可以沒有中間這一層對映,自己的執行緒直接由cpu來排程,或許理論上效率更高。不過這樣實現時,使用者程序需要關注的抽象層次會更低一些,跳過os更加接近cpu,即自己要去做許多os要做的事情,自然的os的排程演算法、建立、銷毀、上下文切換、掛起等等都要自己要搞定(cpu只做計算),這樣做顯然很麻煩,有人嘗試了,後來放棄了。

設計理念是既希望保留kernel執行緒原有的架構,又想使用使用者執行緒,輕量級程序依然與kernel執行緒一一對應,唯一的變化就是輕量級程序不再與程序直接掛鉤,而是與使用者執行緒掛鉤,使用者執行緒不一定必須與輕量級程序一一對應,而是多對多,就像在使用乙個輕量級程序列表一樣,增加了一層來解除輕量級程序與原程序之間的耦合。

Java實現執行緒的方法

有四種方法 1 繼承thread public class mythread extends thread 2 實現 runnable 介面public class myrunnable implements runnable thread runnable new thread new myrun...

JAVA執行緒實現簡述

一 繼承thread類 class ticket extends thread 二 接runnable介面 class sale implements runnable catch interruptedexception e synchronized this else public class ...

Java 多執行緒實現

在實際應用中我們不會在乙個手機或者電腦上進行單執行緒的開發或者使用,一般都是多執行緒。執行緒 程式中執行的具體事務 程序 表示正在執行的應用程式,乙個程序可以有多個執行緒。事實上執行緒是有執行順序的,但是由於cpu執行的速度非常快,所以覺得是在併發執行,其實是偽裝的併發執行。執行緒的實現有兩種方法 ...