Java面試大全(2020年版)21-30

21.同步有什麼特點:

同步的前提是:多個線程並且多個線程使用的是同一個鎖對象

22.同步的有什麼好處

同步的出現解決了多線程的安全問題

23.同步有什麼弊端

當線程相當多時,因爲每個線程都會去判斷同步上的鎖,這是很耗費資源的,無形中會降低程序的運行效率

24.同步方法:

同步方法就是使用synchronized關鍵字來修飾某個方法,則該方法稱爲同步方法。同步方法的同步監視器是this,也就是調用該方法的對象。

25.同步鎖是誰?

對於非static方法,同步鎖就是this。
對於static方法,我們使用當前方法所在類的字節碼對象(類名.class)。

26.線程安全的類具有什麼特徵

  • 該類的對象可以被多個線程安全的訪問
  • 每個線程調用該對象的任意方法之後都將得到正確結果
  • 每個線程調用該對象的任意方法之後,該對象狀態依然保持合理狀態。

27.Java中sleep方法和wait方法的區別?

雖然兩者都是用來暫停當前運行的線程,但是 sleep() 實際上只是短暫停頓,因爲它不會釋放鎖,而 wait() 意味着條件等待,這就是爲什麼該方法要釋放鎖,因爲只有這樣,其他等待的線程才能在滿足條件時獲取到該鎖

28.run()方法和start()方法區別:

run()方法是多線程程序的一個約定。所有的多線程代碼都在run方法裏面。啓動線程使用start()方法,不是run()方法。調用start()方法來啓動線程,系統會把該線程run()方法當成線程執行體來處理。如果直接調用run()方法,則run()方法會被當成普通方法立即執行,而不是線程執行體。而且在run()方法返回之前其他線程無法併發執行。

29.多線程有幾種實現方法?同步有幾種實現方法?

①多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
②同步的實現方面有兩種,分別是synchronized,wait與notify
wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉
InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某
一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。
Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

30.啓動一個線程是用run()還是start()?

啓動一個線程是調用start()方法,使線程就緒狀態,以後可以被調度爲運行狀態,一個線程必須關聯一些具體的執行代碼,run()方法是該線程所關聯的執行代碼。

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