更新時間:2022-12-09 16:13:05 來源:動力節點 瀏覽1068次
Java軟件開發的就業前景是被公認的不錯選擇,非常適合我們的選擇與轉行,然而大部分的同學從傳統高校中畢業后,步入到社會中發現,并沒有掌握到真正核心的技術,導致大家與開發的失之交臂,今天小編就針對一些面試官的問題,總結出的一些必考知識點,希望可以幫助到大家快速獲得心儀的offer吧!
在語言層面有兩種方式。java.lang.Thread 類的實例就是一個線程但是它需要調用java.lang.Runnable接口來執行,由于線程類本身就是調用的Runnable接口所以你可以繼承 java.lang.Thread 類或者直接調用Runnable接口來重寫run()方法實現線程。
如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量 的值也和預期的是一樣的,就是線程安全的。一個線程安全的計數器類的同一個實例對象在被多個線程使用的情況下也不會出現計算失誤。很顯然你可以將集合類分 成兩組,線程安全和非線程安全的。Vector 是用同步方法來實現線程安全的, 而和它相似的ArrayList不是線程安全的。
Java提供了很豐富的API但沒有為停止線程提供API。JDK 1.0本來有一些像stop(), suspend() 和 resume()的控制方法但是由于潛在的死鎖威脅因此在后續的JDK版本中他們被棄用了,之后Java API的設計者就沒有提供一個兼容且線程安全的方法來停止一個線程。當run() 或者 call() 方法執行完的時候線程會自動結束,如果要手動結束一個線程,你可以用volatile 布爾變量來退出run()方法的循環或者是取消任務來中斷線程。
使線程進入阻塞狀態的方法:
(1)調用sleep方法主動放棄所占用的處理器資源;
(2)調用了一個阻塞式的IO方法:如等待某個輸入輸出流的完成;
(3)線程試圖得到一個鎖,而該鎖正在被其他線程調用;
(4)線程在等待某個通知(notify);
(5)調用suspend方法暫停了線程,暫停后的線程必須通過resume方法來恢復,容易造成死鎖,一般不用;
恢復線程到運行狀態:
(1)sleep方法的線程經過了指定的時間;
(2)阻塞式的IO方法已經返回;
(3)成功的獲取到了試圖得到的鎖;
(4)線程正在等等某個通知時,其他線程發出了一個通知;
(5)調用了resume方法;
以上就是“2023技術核心,線程安全面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習