干貨!90頁PDF,徹底拿下Java并發(fā)
又到了分享學習資料的時間!
友情指路:
第一期:Spring系列;
第二期:MySQL系列;
點擊鏈接跳轉(zhuǎn),即可領(lǐng)取之前分享的精選資料
今天分享的是Java并發(fā)面試資料,

這份資料包含Java基礎(chǔ)面試題、內(nèi)存模型、鎖、并發(fā)工具和線程池五大部分。
老規(guī)矩,為了方便大家保存和閱讀,我把完整資料和答案打包為pdf。
關(guān)注下方公眾號SpringForAll社區(qū),回復關(guān)鍵詞【并發(fā)2022】,即可免費領(lǐng)取完整pdf資料!。
部分資料內(nèi)容:
線程有幾種狀態(tài)?
在Java中,線程共有六種狀態(tài):

線程在自身的生命周期中, 并不是固定地處于某個狀態(tài),而是隨著代碼的執(zhí)行在不同的狀態(tài)之間進行切換,Java線程狀態(tài)變化如圖示:

Java線程狀態(tài)變化
線程間有哪些通信方式?

線程間通信方式
volatile和synchronized關(guān)鍵字
關(guān)鍵字volatile可以用來修飾字段(成員變量),就是告知程序任何對該變量的訪問均需要從共享內(nèi)存中獲取,而對它的改變必須同步刷新回共享內(nèi)存,它能保證所有線程對變量訪問的可見性。
關(guān)鍵字synchronized可以修飾方法或者以同步塊的形式來進行使用,它主要確保多個線程在同一個時刻,只能有一個線程處于方法或者同步塊中,它保證了線程對變量訪問的可見性和排他性。
等待/通知機制
可以通過Java內(nèi)置的等待/通知機制(wait()/notify())實現(xiàn)一個線程修改一個對象的值,而另一個線程感知到了變化,然后進行相應的操作。
管道輸入/輸出流
管道輸入/輸出流和普通的文件輸入/輸出流或者網(wǎng)絡(luò)輸入/輸出流不同之處在于,它主要用于線程之間的數(shù)據(jù)傳輸,而傳輸?shù)拿浇闉閮?nèi)存。
管道輸入/輸出流主要包括了如下4種具體實現(xiàn):PipedOutputStream、PipedInputStream、 PipedReader和PipedWriter,前兩種面向字節(jié),而后兩種面向字符。
使用Thread.join()
如果一個線程A執(zhí)行了thread.join()語句,其含義是:當前線程A等待thread線程終止之后才從thread.join()返回。。線程Thread除了提供join()方法之外,還提供了join(long millis)和join(long millis,int nanos)兩個具備超時特性的方法。
使用ThreadLocal
ThreadLocal,即線程變量,是一個以ThreadLocal對象為鍵、任意對象為值的存儲結(jié)構(gòu)。這個結(jié)構(gòu)被附帶在線程上,也就是說一個線程可以根據(jù)一個ThreadLocal對象查詢到綁定在這個線程上的一個值。
可以通過set(T)方法來設(shè)置一個值,在當前線程下再通過get()方法獲取到原先設(shè)置的值。
我已經(jīng)將所有題目和答案整理好了
關(guān)注下方公眾號,回復關(guān)鍵詞"并發(fā)2022"
即可免費領(lǐng)取pdf資料????
