1. 程式人生 > >簡單理解線程

簡單理解線程

調度 創建線程 註意 部分 bsp 線程 java 設定 cal

  1. 線程是一個程序裏面不同的執行路徑
  2. 線程的狀態:先創建線程對象,然後調用start()方法進入就緒狀態。(但並不是會馬上,等到cpu的調度之後進入運行狀態,然後可能會運行的時候出問題,進入堵塞狀態。也有可能終止了。
  3. 一些常用的方法:

Sleep():指定線程睡眠多長時間

Yield():讓出cpu給其他線程

Notify():叫醒線程

Notifyall():叫醒所有線程

Setpriority():設定優先級

技術分享圖片

技術分享圖片

  1. 實現線程的兩種方法:

繼承Thread線程類或者實現runnable接口,推薦使用實現接口的方法來實現,因為java不可以多繼承。然後再重寫他們的Run()方法,這個方法類似

struts2裏面的execute()方法,都是基類定義好需要在裏面實現的。

  1. 線程同步:synchronized(this){

需要同步的代碼塊;

}

或者:直接在方法中加上synchronized,創建同步方法。

只有當前代碼塊運行完其他對象才可以去訪問當前的同步快。

需要註意的是:synchronized的有效範圍只是他所控制的當前對象或者方法,而其他非synchronized的對象,方法還是可以正常訪問的。

  1. 死鎖:當一個線程需要某個對象才能執行,但是這個對象被其他的線程給鎖住了,並且這個線程需要某個對象才能執行,而剛好被你這個對象給鎖住了,就會造成死鎖。解決辦法就是可以把你要同步的代碼塊給擴大了。
  2. Wait()sleep()的區別:

首先wait()object類的方法,而sleep()thread類的。Wait()相當於把鎖給放開了,別的對象可以訪問你原來鎖住的部分了,而sleep()卻還是鎖住,不可以訪問。

簡單理解線程