五十一、sleep()和wait()有什么區別
Sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時候會自動恢復。調用sleep不會釋放對象鎖。
Wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify發放(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
五十二、同步和異步有何異同,在什么情況下分別使用它們?
如果數據將在線程間共享。例如正在寫的數據以后可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那么這些數據就是共享數據,必須進行同步存取。
當應用程序在對象上調用了一個需要花費很長時間來執行的方法,并且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下采用異步編程往往更有效率。
五十三、abstract class 和 interface 有什么區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用于要創建一個體現某些基本行為的類,并為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract類的實例。然而可以創建一個變量,其類型是一個抽象類,并讓他指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則他們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其他類可以再類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中所有的方法都是抽象的,沒有一個有程序體。接口只可以定義static final 成員變量、接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以再實現了該接口的類的任何對象上調用接口的方法。由于有抽象類,它允許使用接口名為引用變量的類型。通常的動態連編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceo
F運算符可以用來決定某對象的類是否實現了接口。