簡單梳理Java併發編程的重點知識

對於初學Java的人來說,類、對象、進程、線程、併發與串行等一系列概念很容易讓人混淆。想要熟練掌握這些基礎知識點,你需要有一個很好的邏輯思維以及條理清晰的分類。接下來我就給大家簡單梳理併發編程相關知識。

想要學好Java併發編程,我們一定要了解一些基礎概念:比如線程的概念,線程的優先級,線程的概念,啓動和終止線程,線程間通信等等。接下來的我就以企業招聘面試爲例,給大家簡單梳理Java併發編程重點知識。
在這裏插入圖片描述

線程與進程的區別?

進程是操作系統分配資源的最小單元,線程是操作系統調度的最小單元。一個程序至少有一個進程,一個進程至少有一個線程。

什麼是多線程中的上下文切換?

多線程會共同使用一組計算機上的CPU,而線程數大於給程序分配的CPU數量時,爲了讓各個線程都有執行的機會,就需要輪轉使用CPU。不同的線程切換使用CPU發生的切換數據等就是上下文切換。

在Java中守護線程和本地線程區別?

Java中的線程分爲兩種:守護線程(Daemon)和用戶線程(User)。任何線程都可以設置爲守護線程和用戶線程,通過方法Thread.setDaemon(bool on);true則把該線程設置爲守護線程,反之則爲用戶線程。Thread.setDaemon()必須在Thread.start()之前調用,否則運行時會拋出異常。

兩者的區別:
唯一的區別是判斷虛擬機(JVM)何時離開,Daemon是爲其他線程提供服務,如果全部的User Thread已經撤離,Daemon 沒有可服務的線程,JVM撤離。也可以理解爲守護線程是JVM自動創建的線程(但不一定),用戶線程是程序創建的線程;比如JVM的垃圾回收線程是一個守護線程,當所有線程已經撤離,不再產生垃圾,守護線程自然就沒事可幹了,當垃圾回收線程是Java虛擬機上僅剩的線程時,Java虛擬機會自動離開。

死鎖是什麼?如何產生的?

死鎖:是指兩個或兩個以上的進程(或線程)在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。

產生死鎖的必要條件:

互斥條件:所謂互斥就是進程在某一時間內獨佔資源。
請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
不剝奪條件:進程已獲得資源,在末使用完之前,不能強行剝奪。
循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。

Java中用到的線程調度算法是什麼?

採用時間片輪轉的方式。可以設置線程的優先級,會映射到下層的系統上面的優先級上,如非特別需要,儘量不要用,防止線程飢餓。飢餓是一個或者多個線程因爲種種原因無法獲得所需要的資源,導致一直無法執行的狀態。

爲什麼使用Executor框架?

Executor框架是一個根據一組執行策略調用,調度,執行和控制的異步任務的框架。使用Executor的原因有三:

1)每次執行任務創建線程 new Thread()比較消耗性能,創建一個線程是比較耗時、耗資源的。
2)調用 new Thread()創建的線程缺乏管理,被稱爲野線程,而且可以無限制的創建,線程之間的相互競爭會導致過多佔用系統資源而導致系統癱瘓,還有線程之間的頻繁交替也會消耗很多系統資源。
3)接使用new Thread() 啓動的線程不利於擴展,比如定時執行、定期執行、定時定期執行、線程中斷等都不便實現。

想要學好Java併發編程,你需要掌握很多基本概念,比如進程、線程、死鎖、活鎖、進程的優先級以及進程狀態等等。而想要順利通過企業面試,你還需要具備相應的實戰經驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章