簡單理解線程
阿新 • • 發佈:2017-11-27
調度 創建線程 註意 部分 bsp 線程 java 設定 cal struts2裏面的execute()方法,都是基類定義好需要在裏面實現的。
- 線程是一個程序裏面不同的執行路徑
- 線程的狀態:先創建線程對象,然後調用start()方法進入就緒狀態。(但並不是會馬上,等到cpu的調度之後進入運行狀態,然後可能會運行的時候出問題,進入堵塞狀態。也有可能終止了。
- 一些常用的方法:
Sleep():指定線程睡眠多長時間
Yield():讓出cpu給其他線程
Notify():叫醒線程
Notifyall():叫醒所有線程
Setpriority():設定優先級
- 實現線程的兩種方法:
繼承Thread線程類或者實現runnable接口,推薦使用實現接口的方法來實現,因為java不可以多繼承。然後再重寫他們的Run()方法,這個方法類似
- 線程同步:synchronized(this){
需要同步的代碼塊;
}
或者:直接在方法中加上synchronized,創建同步方法。
只有當前代碼塊運行完其他對象才可以去訪問當前的同步快。
需要註意的是:synchronized的有效範圍只是他所控制的當前對象或者方法,而其他非synchronized的對象,方法還是可以正常訪問的。
- 死鎖:當一個線程需要某個對象才能執行,但是這個對象被其他的線程給鎖住了,並且這個線程需要某個對象才能執行,而剛好被你這個對象給鎖住了,就會造成死鎖。解決辦法就是可以把你要同步的代碼塊給擴大了。
- Wait()和sleep()的區別:
首先wait()是object類的方法,而sleep()是thread類的。Wait()相當於把鎖給放開了,別的對象可以訪問你原來鎖住的部分了,而sleep()卻還是鎖住,不可以訪問。
簡單理解線程