更新時間:2022-12-09 16:13:05 來源:動力節(jié)點 瀏覽1452次
Java軟件開發(fā)的就業(yè)前景是被公認的不錯選擇,非常適合我們的選擇與轉(zhuǎn)行,然而大部分的同學從傳統(tǒng)高校中畢業(yè)后,步入到社會中發(fā)現(xiàn),并沒有掌握到真正核心的技術(shù),導致大家與開發(fā)的失之交臂,今天小編就針對一些面試官的問題,總結(jié)出的一些必考知識點,希望可以幫助到大家快速獲得心儀的offer吧!

在語言層面有兩種方式。java.lang.Thread 類的實例就是一個線程但是它需要調(diào)用java.lang.Runnable接口來執(zhí)行,由于線程類本身就是調(diào)用的Runnable接口所以你可以繼承 java.lang.Thread 類或者直接調(diào)用Runnable接口來重寫run()方法實現(xiàn)線程。
如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結(jié)果和單線程運行的結(jié)果是一樣的,而且其他的變量 的值也和預期的是一樣的,就是線程安全的。一個線程安全的計數(shù)器類的同一個實例對象在被多個線程使用的情況下也不會出現(xiàn)計算失誤。很顯然你可以將集合類分 成兩組,線程安全和非線程安全的。Vector 是用同步方法來實現(xiàn)線程安全的, 而和它相似的ArrayList不是線程安全的。
Java提供了很豐富的API但沒有為停止線程提供API。JDK 1.0本來有一些像stop(), suspend() 和 resume()的控制方法但是由于潛在的死鎖威脅因此在后續(xù)的JDK版本中他們被棄用了,之后Java API的設(shè)計者就沒有提供一個兼容且線程安全的方法來停止一個線程。當run() 或者 call() 方法執(zhí)行完的時候線程會自動結(jié)束,如果要手動結(jié)束一個線程,你可以用volatile 布爾變量來退出run()方法的循環(huán)或者是取消任務來中斷線程。
使線程進入阻塞狀態(tài)的方法:
(1)調(diào)用sleep方法主動放棄所占用的處理器資源;
(2)調(diào)用了一個阻塞式的IO方法:如等待某個輸入輸出流的完成;
(3)線程試圖得到一個鎖,而該鎖正在被其他線程調(diào)用;
(4)線程在等待某個通知(notify);
(5)調(diào)用suspend方法暫停了線程,暫停后的線程必須通過resume方法來恢復,容易造成死鎖,一般不用;
恢復線程到運行狀態(tài):
(1)sleep方法的線程經(jīng)過了指定的時間;
(2)阻塞式的IO方法已經(jīng)返回;
(3)成功的獲取到了試圖得到的鎖;
(4)線程正在等等某個通知時,其他線程發(fā)出了一個通知;
(5)調(diào)用了resume方法;
以上就是“2023技術(shù)核心,線程安全面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動力節(jié)點Java官網(wǎng)。