【躍遷之路】【434天】刻意練習系列193—Java基礎(2018.04.15)

@(躍遷之路)專欄java

叨叨兩句

  1. 技術的精進不能只是簡單的刷題,而應該是不斷的「刻意」練習
  2. 該系列改版後正式歸入【躍遷之路】專欄,持續更新

刻意練習——多線程

下列關於java 中的 wait()方法和 sleep()方法的區別描述錯誤的是?多線程

正確答案: D 函數

A wait()方法屬於Object類,sleep()屬於Thread類
B 調用wait()方法的時候,線程會放棄對象鎖
C 調用sleep()方法的過程當中,線程不會釋放對象鎖
D sleep()方法致使了程序暫停執行指定的時間,讓出cpu給其餘線程操作系統

一、這兩個方法來自不一樣的類分別是,sleep來自Thread類,和wait來自Object類。

sleep是Thread的靜態類方法,誰調用的誰去睡覺,即便在a線程裏調用了b的sleep方法,實際上仍是a去睡覺,要讓b線程睡覺要在b的代碼中調用sleep。


二、 最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得敏感詞線程可使用同步控制塊或者方法。

sleep不出讓系統資源;wait是進入線程等待池等待,出讓系統資源敏感詞線程能夠佔用CPU。通常wait不會加時間限制,由於若是wait線程的運行資源不夠,再出來也沒用,要等待敏感詞線程調用notify/notifyAll喚醒等待池中的全部線程,纔會進入就緒隊列等待OS分配系統資源。sleep(milliseconds)能夠用時間指定使它自動喚醒過來,若是時間不到只能調用interrupt()強行打斷。

Thread.Sleep(0)的做用是「觸發操做系統馬上從新進行一次CPU競爭」。


三、使用範圍:wait,notify和notifyAll只能在同步控制方法或者同步控制塊裏面使用,而sleep能夠在任何地方使用 
   synchronized(x){ 
      x.notify() 
     //或者wait() 
   }

四、sleep必須捕獲異常,而wait,notify和notifyAll不須要捕獲異常

刻意練習——重載、重寫

下面哪幾個函數 public void example(){....} 的重載函數?()線程

正確答案: A D
A public void example(int m){...}
B public int example(){..}
C public void example2(){..}
D public int example(int m,float f){...}code

重載只要求參數列表不一樣,返回值無關
相關文章
相關標籤/搜索