線程與進(jìn)程理論的知識(shí)入門(mén)

1.線程和進(jìn)程的定義

  • 線程:CPU調(diào)度的最小單位,不能獨(dú)立于進(jìn)程單獨(dú)存在
  • 進(jìn)程:應(yīng)用在操作系統(tǒng)中運(yùn)行最小的分配單位

2.CPU核心數(shù)和線程數(shù)的關(guān)系

CPU核心數(shù)和線程數(shù)的關(guān)系

內(nèi)核數(shù)和線程的執(zhí)行個(gè)數(shù) 一對(duì)一的關(guān)系
邏輯處理器是intel做的虛擬化

3.CPU時(shí)間片輪轉(zhuǎn)機(jī)制

時(shí)間片輪轉(zhuǎn)調(diào)度是一種最古老、最簡(jiǎn)單、最公平且使用最廣的算法,又稱 RR 調(diào)度。每個(gè)進(jìn)程被分配一個(gè)時(shí)間段,稱作它的時(shí)間片,即該進(jìn)程允許運(yùn)行的時(shí)間。

  • 上下文切換
    切換執(zhí)行的進(jìn)程

4.并行和并發(fā)

  • 并行(同一時(shí)刻)
    指應(yīng)用能夠同時(shí)執(zhí)行不同的任務(wù),例:吃飯的時(shí)候可以邊吃飯邊打電話, 這兩件事情可以同時(shí)執(zhí)行
  • 并發(fā)(同一時(shí)間單位)
    指應(yīng)用能夠交替執(zhí)行不同的任務(wù),比如單 CPU 核心下執(zhí)行多線程并非是 同時(shí)執(zhí)行多個(gè)任務(wù),如果你開(kāi)兩個(gè)線程執(zhí)行,就是在你幾乎不可能察覺(jué)到的速度不斷去切換這兩個(gè)任務(wù),已達(dá)到"同時(shí)執(zhí)行效果",其實(shí)并不是的,只是計(jì)算機(jī)的速度太快,我們無(wú)法察覺(jué)到而已.
  • 兩者區(qū)別:一個(gè)是交替執(zhí)行,一個(gè)是同時(shí)執(zhí)行

5.高并發(fā)編程的意義、好處和注意事項(xiàng)

  • 好處
    充分利用 CPU 的資源
    加快響應(yīng)用戶的時(shí)間
    可以使你的代碼模塊化,異步化,簡(jiǎn)單化
  • 注意事項(xiàng)
    線程之間的安全性
    線程之間的死鎖
    線程太多了會(huì)將服務(wù)器資源耗盡形成死機(jī)當(dāng)機(jī)

6.Java 程序天生就是多線程的

  • 一個(gè)最簡(jiǎn)單的main函數(shù)創(chuàng)建的所有線程
[6] Monitor Ctrl-Break //監(jiān)控 Ctrl-Break 中斷信號(hào)的 
[5] Attach Listener //內(nèi)存 dump,線程 dump,類信息統(tǒng)計(jì),獲取系統(tǒng)屬性等 [4] Signal Dispatcher // 分發(fā)處理發(fā)送給 JVM 信號(hào)的線程 
[3] Finalizer // 調(diào)用對(duì)象 finalize 方法的線程 
[2] Reference Handler//清除 Reference 的線程 
[1] main //main 線程,用戶程序入口

7.java新啟線程有幾種方式(兩種)

注意:在官方Thread類的代碼注釋中寫(xiě)明是兩種

  • 類Thread
X extends Thread;,然后 X.start
  • 接口Runnable
X implements Runnable;然后交給 Thread 運(yùn)行
  • Thread 和 Runnable 的區(qū)別
    Thread 才是 Java 里對(duì)線程的唯一抽象,Runnable 只是對(duì)任務(wù)(業(yè)務(wù)邏輯) 的抽象。Thread 可以接受任意一個(gè) Runnable 的實(shí)例并執(zhí)行。

8.線程終止

暫停、恢復(fù)和停止操作對(duì)應(yīng)在線程 Thread 的 API 就是 suspend()、resume() 和 stop()。但是這些 API 是過(guò)期的,也就是不建議使用的。

  • stop()方 法在終結(jié)一個(gè)線程時(shí)不會(huì)保證線程的資源正常釋放,通常是沒(méi)有給予線程完成資源釋放工作的機(jī)會(huì),因此會(huì)導(dǎo)致程序可能工作在不確定狀態(tài)下。

  • interrupt()方法:修改線程中斷標(biāo)識(shí)位

  • isInterrupted():判斷線程中斷標(biāo)識(shí)位

  • Thread.interrupted() :進(jìn)行判斷當(dāng)前線程是否被中斷,不過(guò) Thread.interrupted() 會(huì)同時(shí)將中斷標(biāo)識(shí)位改寫(xiě)為 false。

  • JDK中的 java里的線程是協(xié)作式的,不是搶占式的

Thread.currentThread().isInterrupted() //判斷當(dāng)前線程的標(biāo)識(shí)位
  • 中斷異常在阻塞線程是對(duì)中斷標(biāo)識(shí)位的影響
    中斷異常捕獲到異常時(shí)會(huì)修改中斷標(biāo)志位為false

9.對(duì) Java 里的線程再多一點(diǎn)點(diǎn)認(rèn)識(shí)

  • start 和 run方法的區(qū)別
    start才是真正和線程產(chǎn)生關(guān)系,僅可以調(diào)用一次
    run方法時(shí)業(yè)務(wù)邏輯實(shí)現(xiàn)的地方,run可以反復(fù)調(diào)用,可以脫離線程調(diào)用

  • join方法(可以是線程的執(zhí)行變成串行)
    把指定的線程加入到當(dāng)前線程,可以將兩個(gè)交替執(zhí)行的線程合并為順序執(zhí)行。 比如在線程 B 中調(diào)用了線程 A 的 Join()方法,直到線程 A 執(zhí)行完畢后,才會(huì)繼續(xù) 執(zhí)行線程 B。

  • 線程的優(yōu)先級(jí)(優(yōu)先級(jí)的范 圍從 1~10)
    在不同的 JVM 以及操作系統(tǒng)上,線程規(guī)劃會(huì) 存在差異,有些操作系統(tǒng)甚至?xí)雎詫?duì)線程優(yōu)先級(jí)的設(shè)定

  • 守護(hù)線程
    Daemon(守護(hù))線程是一種支持型線程,因?yàn)樗饕挥米鞒绦蛑泻笈_(tái)調(diào) 度以及支持性工作。這意味著,當(dāng)一個(gè) Java 虛擬機(jī)中不存在非 Daemon 線程的 時(shí)候,Java 虛擬機(jī)將會(huì)退出??梢酝ㄟ^(guò)調(diào)用 Thread.setDaemon(true)將線程設(shè)置 為 Daemon 線程。我們一般用不上,比如垃圾回收線程就是 Daemon 線程。
    Daemon 線程被用作完成支持性工作,但是在 Java 虛擬機(jī)退出時(shí) Daemon 線 程中的 finally 塊并不一定會(huì)執(zhí)行。在構(gòu)建 Daemon 線程時(shí),不能依靠 finally 塊中 的內(nèi)容來(lái)確保執(zhí)行關(guān)閉或清理資源的邏輯。

10.synchronized 內(nèi)置鎖

  • 用處與用法
    同步塊
    同步方法
  • 對(duì)象鎖:對(duì)象鎖是用于對(duì)象實(shí)例方法
  • 類鎖:類鎖是用于類的靜態(tài) 方法或者一個(gè)類的 class 對(duì)象上的
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Java和Android開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)提到進(jìn)程、線程,什么是進(jìn)程,什么是線程? 進(jìn)程與線程 進(jìn)程定義:進(jìn)程...
    程序猿突擊閱讀 660評(píng)論 0 0
  • 1.什么是進(jìn)程和線程 進(jìn)程:是操作系統(tǒng)進(jìn)行資源分配的最小單位,資源包括CPU、內(nèi)存空間、磁盤(pán)IO等。一個(gè)進(jìn)程是一個(gè)...
    w達(dá)不溜w閱讀 528評(píng)論 0 2
  • 相關(guān)概念 進(jìn)程是操作系統(tǒng)管理的,每個(gè)進(jìn)程都擁有自己獨(dú)立的內(nèi)存空間,擁有自己獨(dú)立的一整套變量,進(jìn)程和進(jìn)程之間不共享內(nèi)...
    我的襪子都是洞閱讀 511評(píng)論 0 4
  • 前言 大家好啊,我是湯小圓。 今天給大家推薦的是,進(jìn)程與線程的入門(mén)知識(shí),希望對(duì)大家有幫助,謝謝。 簡(jiǎn)介 首先用術(shù)語(yǔ)...
    湯圓學(xué)Java閱讀 201評(píng)論 0 1
  • 目錄: 1、Java并發(fā)機(jī)制底層實(shí)現(xiàn)原理 1.1、volatile volatile通過(guò)一條lock匯編指令: 將...
    Divenier閱讀 478評(píng)論 0 0

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