解析一:
sleep是線程類(Thread)的方法,執行此方法會導致當前此線程暫停指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。 wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法或notifyAll後本線程才獲得對象鎖進入運行狀態 解析二: notity()和notifyAll()兩個方法均可,應該進入就緒狀態而不是運行狀態。 Exception 包括 非檢查性異常 RuntimeException, 及其子類,即運行時的異常,運行時的異常是代碼的BUG, 和檢查性異常,即非運行時異常,程序在編譯的時候會發現的異常 如: IOException之類,在處理類似文件流的時候,java強制規定必須處理可能遇到的文件流異常。 runtimeException是運行時的異常,在運行期間拋出異常的超類,程序可以選擇是否try-catch處理。 其他的檢查性異常(非運行時的異常,如IOException),是必須try-catch的,否則程序在編譯的時候就會發現錯誤。我們都知道jvm運行時刻內存的分配。其中有一個內存區域是jvm虛擬機棧,每一個線程運行時都有一個線程棧,線程棧保存了線程運行時候變量值信息。當線程訪問某一個對象時候值的時候,首先通過對象的引用找到對應在堆內存的變量的值,然後把堆內存變量的具體值load到線程本地內存中,建立一個變量副本,之後線程就不再和對象在堆內存變量值有任何關系,而是直接修改副本變量的值,在修改完之後的某一個時刻(線程退出之前),自動把線程變量副本的值回寫到對象在堆中變量。這樣在堆中的對象的值就產生變化了
java提供了一個系統級的線程,即垃圾回收器線程。用來對每一個分配出去的內存空間進行跟蹤。當JVM空閒時,自動回收每塊可能被回收的內存,GC是完全自動的,不能被強制執行。程序員最多只能用System.gc()來建議執行垃圾回收器回收內存,但是具體的回收時間,是不可知的。 當對象的引用變量被賦值為null,可能被當成垃圾。 源碼程序中用到了一個重要的內部接口:Map.Entry,每個 Map.Entry 其實就是一個 key-value 對。當系統決定存儲 HashMap 中的 key-value 對時,完全沒有考慮 Entry 中的 value,僅僅只是根據 key 來計算並決定每個 Entry 的存儲位置。Entry是數組,數組中的每個元素上掛這個一條鏈表。。 鏈表法就是將相同hash值的對象組織成一個鏈表放在hash值對應的槽位;開放地址法是通過一個探測算法,當某個槽位已經被占據的情況下繼續查找下一個可以使用的槽位。很顯然我們使用的不是開放地址法。 J2Sdk是Sun公司開發的編程工具。 java api是應用程序接口 JAR(Java Archive,Java 歸檔文件)是與平台無關的文件格式,它允許將許多文件組合成一個壓縮文件。為 J2EE 應用程序創建的 JAR 文件是 EAR 文件(企業 JAR 文件)。打開方式java -jar AppletViewer是與html有關的 appletviewer 提供了一個Java運行環境,在其中可測試小應用程序Applet。appletviewer 讀取包含小應用程序的HTML文件並在一個窗口中運行它們。