11.1-全棧Java筆記:多線程技術(shù)的基本概念

多線程是JAVA語言的重要特性,大量應(yīng)用于網(wǎng)絡(luò)編程、應(yīng)用于服務(wù)器端程序的開發(fā)、以及最常見的UI界面底層原理、操作系統(tǒng)底層原理都大量使用了多線程。

我們可以流暢的點擊軟件或者游戲中的各種按鈕,其實,底層就是多線程的應(yīng)用。UI界面的主線程繪制界面,如果有一個耗時的操作發(fā)生則啟動新的線程,完全不影響主線程的工作。當(dāng)這個線程工作完畢后,再更新到主界面上。

我們可以上百人、上千人、上萬人同時訪問某個網(wǎng)站,其實,網(wǎng)站服務(wù)器也是基于多線程的原理。如果沒有多線程,服務(wù)器處理速度會極大降低。

多線程應(yīng)用于計算機的各個方面,但是對于初學(xué)者,我們只需掌握基本的概念即可。在入門階段,暫時沒有必要過深去鉆研。

基本概念

程序

程序”(Program)是一個靜態(tài)的概念,一般對應(yīng)于操作系統(tǒng)中一個可執(zhí)行文件,比如:我們要啟動酷狗聽音樂,則對應(yīng)酷狗的可執(zhí)行程序。當(dāng)我們雙擊酷狗,則加載程序到內(nèi)存中,開始執(zhí)行該程序,于是產(chǎn)生了“進(jìn)程”。

進(jìn)程

執(zhí)行中的程序叫做進(jìn)程(Process),是一個動態(tài)的概念。現(xiàn)代的操作系統(tǒng)都可以同時啟動多個進(jìn)程。比如:我們在用酷狗聽音樂、也可以使用eclipse寫代碼、也可以同時用瀏覽器查看網(wǎng)頁。

進(jìn)程具有如下特點:

1)進(jìn)程是程序的一次動態(tài)執(zhí)行過程,?占用特定的地址空間。

2)每個進(jìn)程由3部分組成:cpu、data、code。每個進(jìn)程都是獨立的,保有自己的cpu時間,代碼和數(shù)據(jù),即便用同一份程序產(chǎn)生好幾個進(jìn)程,它們之間還是擁有自己的這3樣?xùn)|西。??造成的缺點:內(nèi)存的浪費,cpu的負(fù)擔(dān)較重。

3)多任務(wù)(Multitasking)操作系統(tǒng)à將CPU時間動態(tài)地劃分給每個進(jìn)程,操作系統(tǒng)同時執(zhí)行多個進(jìn)程,每個進(jìn)程獨立運行。以進(jìn)程的觀點來看,它會以為自己獨占CPU的使用權(quán)。

4)進(jìn)程的查看。

Windows系統(tǒng): Ctrl+Alt+Del,啟動任務(wù)管理器即可查看所有進(jìn)程

Unix系統(tǒng): ps or top

線程

一個進(jìn)程可以產(chǎn)生多個線程。 多個進(jìn)程可以共享操作系統(tǒng)的某些資源一樣,同一進(jìn)程的多個線程也可以共享進(jìn)程的某些資源(比如:代碼、數(shù)據(jù)),所以線程又被稱為輕量級進(jìn)程(lightweight process)。

1)一個進(jìn)程可擁有多個并行的(concurrent)線程

2)一個進(jìn)程中的多個線程共享相同的內(nèi)存單元/內(nèi)存地址空間à可以訪問相同的變量和對象,而且它們從同一堆中分配對象à通信、數(shù)據(jù)交換、同步操作

3)由于線程間的通信是在同一地址空間上進(jìn)行的,所以不需要額外的通信機制,這就使得通信更簡便而且信息傳遞的速度也更快。

4)線程的啟動、中斷、消亡,消耗的資源非常少。

線程和進(jìn)程的區(qū)別

1)每個進(jìn)程都有獨立的代碼和數(shù)據(jù)空間(進(jìn)程上下文),進(jìn)程間的切換會有較大的開銷。

2)線程可以看成時輕量級的進(jìn)程,同一類線程共享代碼和數(shù)據(jù)空間,每個線程有獨立的運行棧和程序計數(shù)器(PC),線程切換的開銷小。

3)線程和進(jìn)程最根本的區(qū)別在于:進(jìn)程作為資源分配的單位,線程是調(diào)度和執(zhí)行的單位

4)多進(jìn)程: 在操作系統(tǒng)中能同時運行多個任務(wù)(程序)

5)多線程: 在同一應(yīng)用程序中有多個順序流同時執(zhí)行

6)線程是進(jìn)程的一部分,所以線程有的時候被稱為是輕權(quán)進(jìn)程或者輕量級進(jìn)程。

7)一個沒有線程的進(jìn)程是可以被看作單線程的,如果一個進(jìn)程內(nèi)擁有多個進(jìn)程,進(jìn)程的執(zhí)行過程不是一條線(線程)的,而是多條線(線程)共同完成的。

8)系統(tǒng)在運行的時候會為每個進(jìn)程分配不同的內(nèi)存區(qū)域,但是不會為線程分配內(nèi)存(線程所使用的資源是它所屬的進(jìn)程的資源),線程組只能共享資源。那就是 說,出了CPU之外(線程在運行的時候要占用CPU資源),計算機內(nèi)部的軟硬件資源的分配與線程無關(guān),線程只能共享它所屬進(jìn)程的資源。

進(jìn)程與程序的區(qū)別

程序是一組指令的集合,它是靜態(tài)的實體,沒有執(zhí)行的含義。而進(jìn)程是一個動態(tài)的實體,有自己的生命周期。一般說來,一個進(jìn)程肯定與一個程序相對應(yīng),并且只有一個,但是一個程序可以有多個進(jìn)程,或者一個進(jìn)程都沒有。除此之外,進(jìn)程還有并發(fā)性和交往性。簡單地說,進(jìn)程是程序的一部分,程序運行的時候會產(chǎn)生進(jìn)程。




「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗,曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計及研發(fā)工作,從小白逐漸做到工程師、高級工程師、架構(gòu)師。精通Java平臺軟件開發(fā),精通JAVAEE,熟悉各種流行開發(fā)框架。


?筆記包含從淺入深的六大部分:

?A-Java入門階段

?B-數(shù)據(jù)庫從入門到精通

?C-手刃移動前端和Web前端

?D-J2EE從了解到實戰(zhàn)

?E-Java高級框架精解

?F-Linux和Hadoop?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 多線程是JAVA語言的重要特性,大量應(yīng)用于網(wǎng)絡(luò)編程、應(yīng)用于服務(wù)器端程序的開發(fā)、以及最常見的UI界面底層原理、操作系...
    全棧JAVA筆記閱讀 290評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,271評論 25 708
  • 今天上傳App Store,使用ApplicationLoader3.0上傳ipa包遇到一些問題,在這里做一下記錄...
    TongRy閱讀 1,321評論 4 1
  • 陽光灑在了臉上我醉在了心上因你沉醉因你歡笑你和我在一起便是最好的禮物我是你的sun你是我的pikachu
    Gourds閱讀 346評論 0 1
  • 自從涵涵同學(xué)讓我跟她一起洗腳后,天天晚上倒好洗腳水,跟媽媽一起洗腳,已經(jīng)堅持了快十天了。每當(dāng)看到女兒倒好水,就特別...
    仲思涵媽媽閱讀 191評論 0 0

友情鏈接更多精彩內(nèi)容