摘要:
每個正在系統(tǒng)上運行的程序都是一個進程施逾。每個進程包含一到多個線程敷矫。進程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。線程是一組指令的集合汉额,或者是程序的特殊段曹仗,它可以在程序里獨立執(zhí)行。也可以把它理解為代碼運行的上下文蠕搜。所以線程基本上是輕量級的進程怎茫,它負責(zé)在單個程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負責(zé)多個線程的調(diào)度和執(zhí)行。
多線程
線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,稱為多線程.
線程和進程的區(qū)別在于,子進程和父進程有不同的代碼和數(shù)據(jù)空間,而多個線程則共享數(shù)據(jù)空間,每個線程有自己的執(zhí)行堆棧和程序計數(shù)器為其執(zhí)行上下文.多線程主要是為了節(jié)約CPU時間,發(fā)揮利用,根據(jù)具體情況而定. 線程的運行中需要使用計算機的內(nèi)存資源和CPU轨蛤。
多線程面試題(問題解析在后面):
1蜜宪、為什么用線程池?
2、線程池參數(shù)什么意思祥山?
3圃验、講一講線程池中的threadpoolexecutor,每個參數(shù)干什么用的缝呕?
4澳窑、說一下線程池內(nèi)部使用規(guī)則
5、用過AtomicInteger嗎供常?怎么用的摊聋?
6、用過threadlocal嗎栈暇?怎么用的麻裁?
8、【上機】Java中通過哪些方式創(chuàng)建多線程類? 分別使用代碼說明瞻鹏。并調(diào)用之悲立。
9、Thread類有沒有實現(xiàn)Runnable接口?
10新博、當(dāng)調(diào)用一個線程對象的start方法后薪夕,線程馬上進入運行狀態(tài)嗎?
11、下面的代碼赫悄,實際上有幾個線程在運行:
12原献、線程的幾種狀態(tài)
13、說說:sleep埂淮、yield姑隅、join、wait方法的區(qū)別倔撞。
14讲仰、為什么不推薦使用stop和destroy方法來結(jié)束線程的運行?
15、寫個代碼說明痪蝇,終止線程的典型方式鄙陡。
16、A線程的優(yōu)先級是10躏啰,B線程的優(yōu)先級是1趁矾,那么當(dāng)進行調(diào)度時一定會調(diào)用A嗎?
17、synchronize修飾在方法前是什么意思?
18给僵、使用Timer和TimerTask實現(xiàn)定時執(zhí)行毫捣,定時在每天下午17:00執(zhí)行。
19、wait方法被調(diào)用時蔓同,所在線程是否會釋放所持有的鎖資源? sleep方法呢?
20饶辙、wait、notify斑粱、notifyAll是在Thread類中定義的方法嗎畸悬?作用分別是什么?
21珊佣、notify是喚醒所在對象wait pool中的第一個線程嗎蹋宦?
面試問題解析:
問題:為什么用線程池?
解析:有時候,系統(tǒng)需要處理非常多的執(zhí)行時間很短的請求咒锻,如果每一個請求都開啟一個新線程的話冷冗,系統(tǒng)就要不斷的進行線程的創(chuàng)建和銷毀,有時花在創(chuàng)建和銷毀線程上的時間會比線程真正執(zhí)行的時間還長惑艇。
而且當(dāng)線程數(shù)量太多時蒿辙,系統(tǒng)不一定能受得了。
使用線程池主要為了解決一下幾個問題:
通過重用線程池中的線程滨巴,來減少每個線程創(chuàng)建和銷毀的性能開銷思灌。
對線程進行一些維護和管理,比如定時開始恭取,周期執(zhí)行泰偿,并發(fā)數(shù)控制等等。
問題:A線程的優(yōu)先級是10蜈垮,B線程的優(yōu)先級是1耗跛,那么當(dāng)進行調(diào)度時一定會調(diào)用A嗎?
解析:不一定。線程優(yōu)先級對于不同的線程調(diào)度器可能有不同的含義攒发,可能并不是用戶直觀的推測调塌。
見代碼ThreadPriorityTest
問題:synchronize修飾在方法前是什么意思?
解析:一次只能有一個線程進入該方法,其他線程要想在此時調(diào)用該方法,只能排隊等候,當(dāng)前線程(就是在synchronized方法內(nèi)部的線程)執(zhí)行完該方法后,別的線程才能進入.
問題:wait方法被調(diào)用時,所在線程是否會釋放所持有的鎖資源? sleep方法呢?
解析:wait:釋放CPU惠猿,釋放鎖羔砾;
sleep:釋放CPU,不釋放鎖偶妖。
(更多解析在文末)
附錄:
并發(fā)編程學(xué)習(xí)路線圖
包含:
1姜凄、線程基礎(chǔ),線程之間的共享和協(xié)作
2餐屎、線程的并發(fā)工具類
3檀葛、原子操作CAS
4玩祟、顯式鎖和AQS
5腹缩、并發(fā)容器
6、線程池
7、并發(fā)安全
8藏鹊、實戰(zhàn)項目(2個)
9润讥、JMM和底層實現(xiàn)原理
小結(jié)
當(dāng)留給你準(zhǔn)備面試的時間不充足時,要“以始為終”的去思考你最終展示在面試官哪里的狀態(tài)盘寡。先寫好簡歷楚殿,然后以這種目標(biāo)去針對性的復(fù)習(xí)技術(shù)知識點。確保簡歷上寫到的技術(shù)點竿痰,都有話可聊脆粥,都可以聊到關(guān)鍵點上。
面試也是要看狀態(tài)的影涉,當(dāng)所有的問題你都可以侃侃而談,這時你的狀態(tài)自然是最好的。
祝各位面試順利乖杠!
需要面試題匯總(可私信我免費領(lǐng)取答案)私信【面試資料】即可領(lǐng)取
附加java開發(fā)的資料(面試資源與經(jīng)驗總結(jié)瘦棋,Dubbo、Redis鲜棠、設(shè)計模式肌厨、Netty、zookeeper豁陆、Spring cloud柑爸、分布式、高并發(fā)等架構(gòu)技術(shù)視頻教程資料,架構(gòu)思維導(dǎo)圖盒音,以及面試資料竖配,了解最新的學(xué)習(xí)動態(tài);了解最新的阿里里逆、京東招聘資訊)