java,exe是java虛擬機 javadoc.exe用來製作java文檔 jdb.exe是java的調試器 javaprof,exe是剖析工具 解析一: sleep是線程類(Thread)的方法,執行此方法會導致當前此線程暫停指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復 ...
![](http://images2015.cnblogs.com/blog/884694/201701/884694-20170104164755394-1602874962.png)
解析一:
sleep是線程類(Thread)的方法,執行此方法會導致當前此線程暫停指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。 wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法或notifyAll後本線程才獲得對象鎖進入運行狀態 解析二: notity()和notifyAll()兩個方法均可,應該進入就緒狀態而不是運行狀態。![](http://images2015.cnblogs.com/blog/884694/201701/884694-20170104170134503-964762336.png)
![](http://images2015.cnblogs.com/blog/884694/201701/884694-20170104190742019-103395327.png)
我們都知道jvm運行時刻記憶體的分配。其中有一個記憶體區域是jvm虛擬機棧,每一個線程運行時都有一個線程棧,線程棧保存了線程運行時候變數值信息。當線程訪問某一個對象時候值的時候,首先通過對象的引用找到對應在堆記憶體的變數的值,然後把堆記憶體變數的具體值load到線程本地記憶體中,建立一個變數副本,之後線程就不再和對象在堆記憶體變數值有任何關係,而是直接修改副本變數的值,在修改完之後的某一個時刻(線程退出之前),自動把線程變數副本的值回寫到對象在堆中變數。這樣在堆中的對象的值就產生變化了
![](http://images2015.cnblogs.com/blog/884694/201701/884694-20170104191208847-640398071.png)
![](http://images2015.cnblogs.com/blog/884694/201701/884694-20170104191820409-933114409.png)