国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java -并發(fā)(多線程)-Interview面試題收集

這篇具有很好參考價(jià)值的文章主要介紹了Java -并發(fā)(多線程)-Interview面試題收集。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?

1、多線程并發(fā)

1)多線程中 synchronized 鎖升級(jí)的原理是什么?

synchronized 鎖升級(jí)原理:在鎖對(duì)象的對(duì)象頭里面有一個(gè) threadid 字段,在第一次訪問(wèn)的時(shí)候 threadid 為空,jvm 讓其持有偏向鎖,并將 threadid 設(shè)置為其線程 id,再次進(jìn)入的時(shí)候會(huì)先判斷 threadid 是否與其線程 id 一致,如果一致則可以直接使用此對(duì)象,如果不一致,則升級(jí)偏向鎖為 輕量級(jí)鎖,通過(guò)自旋循環(huán)一定次數(shù)來(lái)獲取鎖,執(zhí)行一定次數(shù)之后,如果還沒(méi)有正常獲取到要使用的 對(duì)象,此時(shí)就會(huì)把鎖從輕量級(jí)升級(jí)為重量級(jí)鎖,此過(guò)程就構(gòu)成了 synchronized 鎖的升級(jí)。 鎖的升級(jí)的目的:鎖升級(jí)是為了減低了鎖帶來(lái)的性能消耗。在 Java 6 之后優(yōu)化 synchronized 的實(shí)現(xiàn)方 式,使用了偏向鎖升級(jí)為輕量級(jí)鎖再升級(jí)到重量級(jí)鎖的方式,從而減低了鎖帶來(lái)的性能消耗。

偏向鎖,顧名思義,它會(huì)偏向于第一個(gè)訪問(wèn)鎖的線程,如果在運(yùn)行過(guò)程中,同步鎖只有一個(gè)線程訪 問(wèn),不存在多線程爭(zhēng)用的情況,則線程是不需要觸發(fā)同步的,減少加鎖/解鎖的一些CAS操作(比 如等待隊(duì)列的一些CAS操作),這種情況下,就會(huì)給線程加一個(gè)偏向鎖。 如果在運(yùn)行過(guò)程中,遇 到了其他線程搶占鎖,則持有偏向鎖的線程會(huì)被掛起,JVM會(huì)消除它身上的偏向鎖,將鎖恢復(fù)到標(biāo) 準(zhǔn)的輕量級(jí)鎖。

輕量級(jí)鎖是由偏向所升級(jí)來(lái)的,偏向鎖運(yùn)行在一個(gè)線程進(jìn)入同步塊的情況下,當(dāng)?shù)诙€(gè)線程加入鎖 爭(zhēng)用的時(shí)候,輕量級(jí)鎖就會(huì)升級(jí)為重量級(jí)鎖;

重量級(jí)鎖是synchronized ,是 Java 虛擬機(jī)中最為基礎(chǔ)的鎖實(shí)現(xiàn)。在這種狀態(tài)下,Java 虛擬機(jī)會(huì)阻 塞加鎖失敗的線程,并且在目標(biāo)鎖被釋放的時(shí)候,喚醒這些線程。

2、線程池有什么優(yōu)點(diǎn)?

降低資源消耗:重用存在的線程,減少對(duì)象創(chuàng)建銷(xiāo)毀的開(kāi)銷(xiāo)。

提高響應(yīng)速度:可有效的控制最大并發(fā)線程數(shù),提高系統(tǒng)資源的使用率,同時(shí)避免過(guò)多資源競(jìng)爭(zhēng), 避免堵塞。當(dāng)任務(wù)到達(dá)時(shí),任務(wù)可以不需要的等到線程創(chuàng)建就能立即執(zhí)行。

提高線程的可管理性:線程是稀缺資源,如果無(wú)限制的創(chuàng)建,不僅會(huì)消耗系統(tǒng)資源,還會(huì)降低系統(tǒng) 的穩(wěn)定性,使用線程池可以進(jìn)行統(tǒng)一的分配,調(diào)優(yōu)和監(jiān)控。

附加功能:提供定時(shí)執(zhí)行、定期執(zhí)行、單線程、并發(fā)數(shù)控制等功能。

3、ThreadPoolExecutor飽和策略有哪些?

如果當(dāng)前同時(shí)運(yùn)行的線程數(shù)量達(dá)到最大線程數(shù)量并且隊(duì)列也已經(jīng)被放滿了任時(shí),ThreadPoolTaskExecutor 定 義一些策略:

ThreadPoolExecutor.AbortPolicy:拋出 RejectedExecutionException來(lái)拒絕新任務(wù)的處理。

ThreadPoolExecutor.CallerRunsPolicy:調(diào)用執(zhí)行自己的線程運(yùn)行任務(wù)。您不會(huì)任務(wù)請(qǐng)求。但是 這種策略會(huì)降低對(duì)于新任務(wù)提交速度,影響程序的整體性能。另外,這個(gè)策略喜歡增加隊(duì)列容量。 如果您的應(yīng)用程序可以承受此延遲并且你不能任務(wù)丟棄任何一個(gè)任務(wù)請(qǐng)求的話,你可以選擇這個(gè)策 略

(當(dāng)前線程調(diào)用線程池處理多線程任務(wù),線程池隊(duì)列滿了,那么就會(huì)用當(dāng)前調(diào)用多線程的線程,即用戶線程來(lái)執(zhí)行當(dāng)前需要執(zhí)行的多線程任務(wù)===影響性能,但是不會(huì)丟失任務(wù))

ThreadPoolExecutor.DiscardPolicy:不處理新任務(wù),直接丟棄掉。 ThreadPoolExecutor.DiscardOldestPolicy: 此策略將丟棄最早的未處理的任務(wù)請(qǐng)求。

4、ThreadPoolExecutor線程池的執(zhí)行原理?

5、如何合理分配線程池大小?

要合理的分配線程池的大小要根據(jù)實(shí)際情況來(lái)定,

簡(jiǎn)單的來(lái)說(shuō)的話就是根據(jù)CPU密集和IO密集來(lái) 分配

什么是CPU密集 CPU密集的意思是該任務(wù)需要大量的運(yùn)算,而沒(méi)有阻塞,CPU一直全速運(yùn)行。 CPU密集任務(wù)只有在真正的多核CPU上才可能得到加速(通過(guò)多線程),而在單核CPU上,無(wú)論你開(kāi) 幾個(gè)模擬的多線程,該任務(wù)都不可能得到加速,因?yàn)镃PU總的運(yùn)算能力就那樣。

什么是IO密集 IO密集型,即該任務(wù)需要大量的IO,即大量的阻塞。在單線程上運(yùn)行IO密集型的任務(wù)會(huì)導(dǎo)致浪費(fèi) 大量的CPU運(yùn)算能力浪費(fèi)在等待。所以在IO密集型任務(wù)中使用多線程可以大大的加速程序運(yùn)行, 即時(shí)在單核CPU上,這種加速主要就是利用了被浪費(fèi)掉的阻塞時(shí)間。

分配CPU和IO密集: 1. CPU密集型時(shí),任務(wù)可以少配置線程數(shù),大概和機(jī)器的cpu核數(shù)相當(dāng),這樣可以使得每個(gè)線程都在 執(zhí)行任務(wù) 2. IO密集型時(shí),大部分線程都阻塞,故需要多配置線程數(shù),2*cpu核數(shù) 精確來(lái)說(shuō)的話的話:

從以下幾個(gè)角度分析任務(wù)的特性: 任務(wù)的性質(zhì):CPU密集型任務(wù)、IO密集型任務(wù)、混合型任務(wù)。 任務(wù)的優(yōu)先級(jí):高、中、低。 任務(wù)的執(zhí)行時(shí)間:長(zhǎng)、中、短。 任務(wù)的依賴(lài)性:是否依賴(lài)其他系統(tǒng)資源,如數(shù)據(jù)庫(kù)連接等。

可以得出一個(gè)結(jié)論: 線程等待時(shí)間比CPU執(zhí)行時(shí)間比例越高,需要越多線程。 線程CPU執(zhí)行時(shí)間比等待時(shí)間比例越高,需要越少線程。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-455424.html

到了這里,關(guān)于Java -并發(fā)(多線程)-Interview面試題收集的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java-常見(jiàn)面試題收集(十)

    1 springboot 特點(diǎn) ?1.自動(dòng)配置:Spring Boot可以自動(dòng)配置項(xiàng)目所需的常見(jiàn)配置,從而大大簡(jiǎn)化了項(xiàng)目的搭建和開(kāi)發(fā)過(guò)程。開(kāi)發(fā)者只需通過(guò)添加相應(yīng) ?2.的依賴(lài),Spring Boot就會(huì)自動(dòng)完成相關(guān)的配置工作。 ?3.獨(dú)立運(yùn)行:Spring Boot內(nèi)嵌了如Tomcat、Jetty等Servlet容器,因此可以打包為jar或

    2024年04月14日
    瀏覽(36)
  • 【JAVA開(kāi)發(fā)面試】如何處理并發(fā)訪問(wèn)如何進(jìn)行代碼的單元測(cè)試Java多線程編程消息中間件設(shè)計(jì)模式技術(shù)難題是如何解決的

    【 點(diǎn)我-這里送書(shū) 】 本人詳解 作者:王文峰,參加過(guò) CSDN 2020年度博客之星,《Java王大師王天師》 公眾號(hào):JAVA開(kāi)發(fā)王大師,專(zhuān)注于天道酬勤的 Java 開(kāi)發(fā)問(wèn)題 中國(guó)國(guó)學(xué)、傳統(tǒng)文化和代碼愛(ài)好者的程序人生,期待你的關(guān)注和支持!本人外號(hào):神秘小峯 山峯 轉(zhuǎn)載說(shuō)明:務(wù)必注明

    2024年02月03日
    瀏覽(131)
  • Java并發(fā)常見(jiàn)面試題

    Java并發(fā)常見(jiàn)面試題

    何為進(jìn)程? 進(jìn)程是程序的一次執(zhí)行過(guò)程,是系統(tǒng)運(yùn)行程序的基本單位,因此進(jìn)程是動(dòng)態(tài)的。系統(tǒng)運(yùn)行程序,是一個(gè)進(jìn)程從創(chuàng)建、運(yùn)行到消亡的過(guò)程。 在Java中,當(dāng)我們啟動(dòng)main函數(shù)時(shí)其實(shí)就是啟動(dòng)了一個(gè)JVM的進(jìn)程,而main函數(shù)所在的線程就是這個(gè)進(jìn)程中的一個(gè)線程,也稱(chēng)主線程

    2024年02月05日
    瀏覽(16)
  • 【Java】常見(jiàn)面試題:多線程

    【Java】常見(jiàn)面試題:多線程

    努力經(jīng)營(yíng)當(dāng)下 直至未來(lái)明朗 答:① 進(jìn)程包含線程; ② 線程比進(jìn)程更輕量,創(chuàng)建更快、銷(xiāo)毀也更快; ③ 同一個(gè)進(jìn)程的多個(gè)線程之間共用一份內(nèi)存和文件資源,而進(jìn)程和進(jìn)程之間則是獨(dú)立的文件和內(nèi)存資源;線程共用資源就省去了線程分配資源的過(guò)程 ④ 進(jìn)程是資源分配的基

    2024年03月21日
    瀏覽(24)
  • Java線程池常見(jiàn)面試題詳解

    Java線程池常見(jiàn)面試題詳解

    池化技術(shù) 池化技術(shù)是一種常見(jiàn)的編程技巧, 把一些能夠復(fù)用的東西(比如說(shuō)數(shù)據(jù)庫(kù)連接、線程)放到池中,避免重復(fù)創(chuàng)建、銷(xiāo)毀的開(kāi)銷(xiāo),在需要時(shí)可以重復(fù)使用這些預(yù)先準(zhǔn)備的資源,從而極大提高性能。(提前保存大量資源, 以備不時(shí)之需) 線程池、數(shù)據(jù)庫(kù)連接池、Http 連接池等

    2023年04月26日
    瀏覽(47)
  • Java并發(fā)(一)----進(jìn)程、線程、并行、并發(fā)

    Java并發(fā)(一)----進(jìn)程、線程、并行、并發(fā)

    進(jìn)程 程序由指令和數(shù)據(jù)組成,但這些指令要運(yùn)行,數(shù)據(jù)要讀寫(xiě),就必須將指令加載至 CPU,數(shù)據(jù)加載至內(nèi)存。在指令運(yùn)行過(guò)程中還需要用到磁盤(pán)、網(wǎng)絡(luò)等設(shè)備。進(jìn)程就是用來(lái)加載指令、管理內(nèi)存、管理 IO 的 當(dāng)一個(gè)程序被運(yùn)行,從磁盤(pán)加載這個(gè)程序的代碼至內(nèi)存,這時(shí)就開(kāi)啟了

    2023年04月10日
    瀏覽(34)
  • Java多線程與并發(fā)

    Java多線程與并發(fā)

    序號(hào) 地址 1 計(jì)算機(jī)網(wǎng)絡(luò)核心 2 數(shù)據(jù)庫(kù)相關(guān) 3 Redis 4 Linux相關(guān) 5 JVM的內(nèi)容 6 GC相關(guān)的 7 Java多線程與并發(fā) 8 Java多線程與并發(fā)-原理 9 Java常用類(lèi)庫(kù)與技巧 10 Java框架-Spring 1、JDK版本的選擇 選擇JDK8、JDK11進(jìn)行講解的原因:Oracle長(zhǎng)期支持 2、進(jìn)程和線程的區(qū)別 進(jìn)程和線程的由來(lái) 3、進(jìn)程與

    2024年02月10日
    瀏覽(24)
  • 【Java|多線程與高并發(fā)】線程池詳解

    【Java|多線程與高并發(fā)】線程池詳解

    Java線程池是一種用于管理和重用線程的機(jī)制,它可以在需要執(zhí)行任務(wù)時(shí),從線程池中獲取線程,執(zhí)行任務(wù),然后將線程放回池中,以便后續(xù)使用。線程池可以有效地管理線程的數(shù)量,提高程序的性能和資源利用率。 為什么從線程池里面取線程比直接創(chuàng)建線程快呢? 創(chuàng)建線程是

    2024年02月11日
    瀏覽(28)
  • Java并發(fā)(四)----線程運(yùn)行原理

    Java并發(fā)(四)----線程運(yùn)行原理

    1.1 棧與棧幀?? Java Virtual Machine Stacks (Java 虛擬機(jī)棧 JVM) 我們都知道 JVM 中由堆、棧、方法區(qū)所組成,其中棧內(nèi)存是給誰(shuí)用的呢?其實(shí)就是線程,每個(gè)線程啟動(dòng)后,虛擬機(jī)就會(huì)為其分配一塊棧內(nèi)存。 每個(gè)棧由多個(gè)棧幀(Frame)組成,對(duì)應(yīng)著每次方法調(diào)用時(shí)所占用的內(nèi)存 每個(gè)

    2024年02月02日
    瀏覽(19)
  • Java 并發(fā)(多線程)超詳細(xì)

    Java 并發(fā)(多線程)超詳細(xì)

    此文章已收錄至項(xiàng)目 Developer-Knowledge-Base https://www.cnblogs.com/snow-flower/p/6114765.html java 中的 Lock 鎖 https://javaguide.cn/java/concurrent/java-concurrent-questions-03.html https://www.cnblogs.com/lifegoeson/p/13683785.html 程序是由指令和數(shù)據(jù)有序組成的靜態(tài)概念,程序本身沒(méi)有運(yùn)行的含義,只有在處理器賦予

    2024年02月09日
    瀏覽(41)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包