面試(03)————多線程

目錄

一、線程和進程的區別?

二、并行和并發的區別??

三、線程創建的方式有哪些??

3.1、繼承Thread類

3.2、實現Runnable接口

3.3、實現Callable接口

3.4、線程池

四、Runnable和Callable的區別?

五、在啟動線程的時候,可以使用run方法嗎?run()和start()有什么區別?

六、線程包含了哪些狀態?狀態之間是如何變化的?

七、新建T1、T2、T3三個線程,如何保證它們按順序執行?

八、notify和notifyAll有什么區別?

九、Java中wait方法和sleep方法有什么不同?

十、如何停止一個正在運行的線程?

十一、synchronized關鍵字的底層原理

十二、Monitor實現的鎖屬于重量級鎖。你了解過鎖升級嗎?

十三、談談JMM(Java內存模型)

十四、CAS

十五、樂觀鎖和悲觀鎖?

十六:談談你對volatile的理解?

十七、AQS?

?十八、ReentrantLock的實現原理

十九、synchronized和Lock有什么區別?

二十、死鎖產生的條件?

二十一、如何進行死鎖診斷?

二十二、ConcurrentHashMap

二十三、Java程序中怎么保證多線程的執行安全?(導致并發程序出現問題的根本原因是什么)

二十四、線程池的核心參數(線程池的執行原理)

二十五、線程池中有哪些常見的阻塞隊列

二十六、如何確定核心線程數

二十七、線程池的種類有哪些

二十八、為什么不建議Executors創建線程池


一、線程和進程的區別?

進程:

  • 程序由指令和數據組成,但這些指令要運行,數據要讀寫,就必須將指令加載至CPU,數據加載至內存。在指令運行過程中還需要用到磁盤、網絡等設備。進程就是用來加載指令、管理內存、管理IO的
    ?
  • 當一個程序被運行,從磁盤加載這個程序的代碼至內存,這時就開啟了一個進程。
    ?
  • 進程就可以視為程序的一個實例。大部分程序可以同時運行多個實例進程(例如記事本、畫圖、瀏覽器等),也有的程序只能啟動一個實例進程(例如網易云音樂、360安全衛士等)

線程:?

一個進程之內可以分為一到多個線程。

一個線程就是一個指令流,將指令流中的一條條指令以一定的順序交給CPU執行

Java中,線程作為最小調度單位,進程作為資源分配的最小單位。在windows中進程是不活動的,只是作為線程的容器

?

二、并行和并發的區別??

并發是指系統具有處理多個任務的能力,但這并不意味著這些任務同時執行。在單核CPU的環境下,CPU通過在任務之間迅速切換(上下文切換),給人一種似乎是同時處理多個任務的錯覺。因此,并發關注的是多個任務的啟動、執行和完成的順序,使得多個任務看似在“同時”執行,實際上從宏觀角度是的,但從微觀角度看,這些任務可能并沒有在同一時刻被處理。

?

并行處理是指多個處理器或多核處理器同時處理多個任務。在這種情況下,任務確實是在同一時刻被執行。并行執行的目的是通過同時使用多個計算資源來減少程序的執行時間。它適用于那些可以被分解為可以獨立執行的多個子任務的問題。

簡單來說:

三、線程創建的方式有哪些??

3.1、繼承Thread類

3.2、實現Runnable接口

3.3、實現Callable接口

3.4、線程池

四、Runnable和Callable的區別?

五、在啟動線程的時候,可以使用run方法嗎?run()和start()有什么區別?

六、線程包含了哪些狀態?狀態之間是如何變化的?

線程的狀態可以參考JDK中的Thread類中的枚舉State

七、新建T1、T2、T3三個線程,如何保證它們按順序執行?

八、notify和notifyAll有什么區別?

九、Java中wait方法和sleep方法有什么不同?

十、如何停止一個正在運行的線程?

十一、synchronized關鍵字的底層原理

十二、Monitor實現的鎖屬于重量級鎖。你了解過鎖升級嗎?

十三、談談JMM(Java內存模型)

十四、CAS

CAS全程是:Compare And Swap(比較再交換),它體現的一種樂觀鎖的思想,在無鎖情況下保證線程操作共享數據的原子性。

?

在JUC包下實現的很多類都用到了CAS操作

比如: ?AbstractQueuedSynchronizer(AQS框架)、AtomicXXX類

CAS數據交換流程:?

一個當前內存值V、舊的預期值A、即將更新的值B,當且僅當舊的預期值A和內存值V相同時,將內存值修改為B并返回ture,否則什么都不做,并返回false。如果CAS操作失敗,通過自旋的方式等待并再次嘗試,直到成功

十五、樂觀鎖和悲觀鎖?

樂觀鎖:

它假設不會產生沖突,先去嘗試執行某項操作,失敗了再進行其他處理(一般都是不斷循環重試)。這種鎖不會阻斷其他線程,也不涉及上下文切換,性能開銷小。代表實現是:CAS

悲觀鎖:

它假設一定會發生沖突,因此獲取到鎖之后會阻塞其他等待線程。這樣做的好處是簡單安全,但是掛起線程和回復線程都需要轉入內核態進行,這樣做的話會帶來很大的性能開銷。悲觀鎖的代表是synchronized。然而在真實環境中,大部分時候都不會產生沖突。

十六:談談你對volatile的理解?

總結:

十七、AQS?

全稱是 AbstractQueueSynchronizer,即抽象隊列同步器。它是構建鎖或者其他同步組件的基礎框架

AQS基本工作機制:?

在AQS內部有一個屬性state,這個state就相當于一個資源,默認是0(無鎖狀態),如果隊列中的有一個線程修改成功了state為1,則當前線程就相當于獲取了資源

QS內部維護了一個先進先出的雙向隊列,隊列中存儲的排隊的線程

在對state修改的時候使用的CAS操作,保證多個線程修改的情況下原子性

AQS可以是公平鎖,也可以是非公平鎖

公平鎖是指各個線程在加鎖前先檢查有無排隊的隊列,按排隊順序取獲得鎖。(新的線程到隊列中等待,只讓隊列中的head線程獲取鎖,是公平鎖)

非公平鎖是指線程加鎖前不考慮排隊問題,直接嘗試獲取鎖,獲取不到再去隊尾排隊。值得注意的是,在AQS的實現中,一旦線程進入排隊隊列,即使是非公平鎖,線程也需要乖乖排隊(新的線程與隊列中的線程共同來搶資源,是非公平鎖)

?十八、ReentrantLock的實現原理

ReentrantLock 內部有兩個內部類,分別是 FairSync 和 NonFairSync,對應公平鎖和非公平鎖。他們都繼承自?Sync。Sync 又繼承自AQS。

總結:

十九、synchronized和Lock有什么區別?

二十、死鎖產生的條件?

二十一、如何進行死鎖診斷?

二十二、ConcurrentHashMap

總結:

二十三、Java程序中怎么保證多線程的執行安全?(導致并發程序出現問題的根本原因是什么)

volatile加在共享變量上!!

總結:

二十四、線程池的核心參數(線程池的執行原理)

二十五、線程池中有哪些常見的阻塞隊列

二十六、如何確定核心線程數

二十七、線程池的種類有哪些

總結:

二十八、為什么不建議Executors創建線程池

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23217.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用packstack快速部署OpenStack

目錄 資源列表 基礎環境 安裝packstack 安裝OpenStack 本文記錄了基于CentOS操作系統使用packstack快速部署openstack。 資源列表 操作系統配置磁盤IP數量CentOS7.94C8G50G192.168.207.1551 基礎環境 服務器開啟虛擬化,我這里使用的是VMware虛擬機&#xff0…

Redis教程(二十二):Redis的過期刪除和緩存淘汰策略

傳送門:Redis教程匯總篇,讓你從入門到精通 一、過期刪除策略 Redis 中的過期刪除策略是與 Redis 管理鍵的生命周期相關的一系列操作,用于刪除過期的Key以釋放內存。Redis 提供了三種主要的過期刪除策略: 1、惰性刪除(Lazy Expiration) 工作原理:當客戶端嘗試訪問一個…

書生·浦語大模型全鏈路開源體系-筆記作業4

XTuner 微調 LLM:1.8B、多模態、Agent 引自:Tutorial/xtuner/personal_assistant_document.md at camp2 InternLM/Tutorial GitHub 1. XTuner介紹 引自:歡迎來到 XTuner 的中文文檔 — XTuner 0.1.18.dev0 文檔 1.1. 什么是 XTuner ? X…

修改緩存供應商--EhCache

除了我們默認的緩存形式simlpe之外, 我們其實還有許多其他種類的緩存供應 Ehcache就是其中的一種形式 Ehcache在SpringBoot當中的使用: 其實跟我們之前整合第三方的資源是一樣的形式 1>導入依賴: <!-- 更換緩存, 將默認使用的 Simple 更換為Ehcache--> <depe…

Redis 數據拷貝

一、從db0到db1 將redis數據從db0拷貝到db1&#xff0c;可以使用下面腳本進行復制 REDIS_CLI/usr/local/redis/bin/redis-cli hostredis_host portredis_port passwordredis_password old_base0 new_base1${REDIS_CLI} -h ${host} -p ${port} -a ${password} -n $old_base ke…

【go】windows環境設置goos

場景 本地環境&#xff1a;windows 生產環境&#xff1a;linux 現想在本地將go腳本編譯為可執行二進制文件&#xff0c;轉移至生產中進行運行測試。但go build不生效。 方案&#xff08;修改GOOS&#xff09; cmd打開命令行&#xff0c;執行go env查看本地go環境&#xff0c…

PPT視頻如何16倍速或者加速播放

有兩種方式&#xff0c;一種是修改PPT本身&#xff0c;這種方式非常繁瑣&#xff0c;不太推薦&#xff0c;還有一種就是修改視頻本身&#xff0c;直接讓視頻是16倍速的視頻即可。 如何讓視頻16倍速&#xff0c;我建議人生苦短&#xff0c;我用Python&#xff0c;幾行代碼&…

基本元器件 - 電阻

目錄 電阻的選型 貼片封裝的參數 電阻的阻值 絲印表示方法 標準電阻取值 電阻的失效 0 歐姆電阻的使用 電阻的使用場景 分壓電路 分流電路 限流電路 阻抗匹配電路 RC 充放電電路 上下拉電路 其他電路 電阻的選型 一般來說&#xff0c;要考慮以下四個因素&…

【大模型】基于Hugging Face調用及微調大模型(1)

文章目錄 一、前言二、Transformer三、Hugging Face3.1 Hugging Face Dataset3. 2 Hugging Face Tokenizer3.3 Hugging Face Transformer3.4 Hugging Face Accelerate 四、基于Hugging Face調用模型4.1 調用示例4.2 調用流程概述4.2.1 Tokenizer4.2.2 模型的加載4.2.3 模型基本…

【java 中 IO 流分為幾種?】

文章目錄 概要分類&#xff08;1&#xff09;按照流的方向分類&#xff08;2&#xff09;按照操作數據單位分類&#xff08;3&#xff09;按照IO流的角色分類&#xff08;4&#xff09;常用流的總結 總結 概要 在Java中&#xff0c;IO流主要用于處理數據的傳輸&#xff0c;它們…

軟信天成:告別數據臟亂差!企業數據清洗實戰方案分享

低質量數據普遍存在。據統計&#xff0c;數據質量問題每年給企業造成高達3.1萬億美元的損失。為了防范這種損失&#xff0c;越來越多的企業采用數據清洗來清洗數據&#xff0c;提高數據質量。 數據清洗&#xff0c;顧名思義是將數據上“臟”的部分清洗掉&#xff0c;讓數據變得…

UV膠為什么會開裂?如何避免UV膠開裂?

UV膠為什么會開裂&#xff1f;如何避免UV膠開裂&#xff1f; UV膠開裂可能由以下幾個主要因素導致&#xff1a; 紫外線照射不足&#xff1a;UV膠的固化需要足夠的紫外線能量。如果紫外線照射不足&#xff0c;膠水可能無法完全固化&#xff0c;導致開裂。這可能是由于固化設備…

調試線上資源文件失效問題

之前的老項目&#xff0c;突然報紅&#xff0c;為了定位問題&#xff0c;使用注入和文件替換的方式進行問題定位&#xff01; 1.使用注入 但是刷新后就沒有了&#xff0c;不是特別好用&#xff01; const jqScript document.createElement(script); jqScript.src https://…

從入門到精通:Java三目運算符詳細教程!

哈嘍&#xff0c;各位小伙伴們&#xff0c;你們好呀&#xff0c;我是喵手。運營社區&#xff1a;C站/掘金/騰訊云&#xff1b;歡迎大家常來逛逛 今天我要給大家分享一些自己日常學習到的一些知識點&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相學習&#xff0c;一…

富格林:謹慎欺詐套路防止被騙

富格林指出&#xff0c;近些年來&#xff0c;在全球風險事件頻發的背景下&#xff0c;黃金的避險價值得以凸顯&#xff0c;越來越多投資者被黃金市場可觀的收益所吸引&#xff0c;紛紛加入黃金市場參與投資交易。很多初次接觸黃金的投資者比較關心的是普通投資者如何謹慎欺詐套…

x264 參考幀管理原理:b_ref_reorder 數組變量

b_ref_reorder變量 在x264編碼器中,b_ref_reorder是一個布爾類型的數組,用于標識當前編碼的切片是否需要對參考幀列表進行重排序。這個數組通常有兩個元素,分別對應于兩個參考幀列表:前向參考幀列表(list0)和后向參考幀列表(list1)。 以下是b_ref_reorder的一些關鍵點:…

探索 Linux 中的 Chronyc:一個用于配置和管理 Chrony 的實用工具

探索 Linux 中的 Chronyc&#xff1a;一個用于配置和管理 Chrony 的實用工具 在 Linux 系統中&#xff0c;時間同步是一個至關重要的功能&#xff0c;它確保了系統時間的準確性&#xff0c;對于各種網絡服務和應用來說都至關重要。Chrony 是一個開源的時間同步工具&#xff0c…

SQLserver通過CLR調用TCP接口

一、SQLserver啟用CLR 查看是否開啟CRL&#xff0c;如果run_value1&#xff0c;則表示開啟 EXEC sp_configure clr enabled; GO RECONFIGURE; GO如果未啟用&#xff0c;則執行如下命令啟用CLR sp_configure clr enabled, 1; GO RECONFIGURE; GO二、創建 CLR 程序集 創建新項…

Vue3:eachars 折線圖 數據不聯動 和 tooltip: trigger: ‘axis‘ 不生效,不提示數據

問題1&#xff1a; 點擊折線圖的頭部數據&#xff08;Email、UnionAds等&#xff09; 下面數據線不聯動問題 問題2&#xff1a;下圖是沒有提示數據的Demo 這是echars官網的提示數據圖 3.解決辦法 &#xff08;1&#xff09;檢查是否設置&#xff1a;trigger&#xff1a;axi…

spring 使用多線程,保證事務一致性

1、背景 最近接受到接口優化的任務&#xff0c;查看代碼邏輯后發現在批量處理數據耗時長&#xff0c;想到使用多線程處理批量數據&#xff0c;又要保持原來的事務一致性。 2、實現方法 &#xff08;1&#xff09;、創建多線程事務管理 Component Slf4j public class MultiT…