對象鎖
對象鎖在如下幾種情況由持有線程返還
1. 當synchronized()語句執行完後
2. 當synchronized()出現異常後
3. 當持有鎖的線程調用該對象的wait()方法。此時該線程將釋放對象鎖,而進入對象的wait pool中,等待
suspend()方法是基本的線程控制方法,在一個線程中調用t.suspend(),將使t暫停執行,要想恢復線程,必須由其他線程調用t.resume()恢復t的執行。
線程的生命週期
線程的生命週期主要分爲:新建狀態,可運行狀態,運行狀態,阻塞狀態,終止狀態
會改變線程生命週期中狀態的方法有:
1. yield()(暫停當前線程,從而允許與它具有相同優先級的線程運行)
2. 當線程需要在synchronized塊中等待共享數據狀態改變時,調用wait()方法,這樣該線程等待並且暫時釋放對象鎖,讓其他線程獲得對象鎖,並且放入wait pool中,轉入阻塞狀態,當其他線程操作完畢後,使用notify()方法就可以讓線程重新佔有鎖,並運行。
3. Sleep()方法是讓當前線程處於休眠狀態
線程的創建
創建線程的方法有2種,一是通過創建Thread類的子類實現,二是通過實現Runnable接口的類實現。方法一創建線程要先設計Thread的子類,讓後重寫線程中的run方法,再用start方法啓動線程。
線程的結束
當線程完成運行後,除了線程的正常運行結束外,也可以用stop()方法強行終止線程,但不提倡,用stop方法容易造成線程的不一致,可以使用標準flag,通過設置flag通知一個線程應該結束
併發控制,臨界區
Java中對於共享數據操作的併發控制是採用封鎖技術,一個程序中單獨的,併發的線程對同一個對象進行訪問的代碼段,成爲臨界區,臨界區可以是一個語句塊或者是一個方法,並且用synchronized關鍵字標識。
Java的源文件名與程序名必須相同,其拓展名爲.java
Applet的生命週期
Applet生命週期相關的方法有4種
1. Init() 加載Applet時完成初始工作,
2. start()啓動Applet的執行;
3. stop()停止Applet的執行;
4. destory()完成撤銷清理工作,準備卸載