《java多線程編程核心技術》讀書筆記1

第一章:java多線程技能



在學習線程之前我們首先要清楚一下進程的概念
           進程是操作系統結構的基礎,是系統進行資源分配的和調度的獨立單位。windows上一個運行的word,一個瀏覽器程序就稱之爲一個進程。
線程:線程是進程的一部分,一個進程由一個或多個線程組成,線程可以理解爲進程中獨立運行的子任務,如QQ在運行時就有很多子任務同時運行,再如,好友視頻線程,下載線程,傳輸數據線程,這些不同的任務或功能都有可以同時運行。

多線程的優勢可以充分的利用計算機cpu的資源。相較於單任務環境,多線程可以來回在多個線程任務間進行切換,避免了在單任務環境下某個任務等待自己所期待的事件而不能運行時長時間的佔用cpu.



在java中要實現線程有兩種方式一種是繼承Thread類,一種是實現Runnable接口,這兩種方式都需要實現run方法,線程的執行就是執行從執行run方法開始的。由於java是單繼承的所以一般而言,在使用中用到實現Runnablea接口較多,因爲同時可以實現繼承。Thread類也是實現Runnable接口的。啓用線程需要調用線程的start()方法,這是唯一的啓動線程的方式。

線程的執行線程的執行是未知的,意思就是說我們無法知道線程什麼時候開始,什麼時候結束。當啓動線程以後,線程的執行就不歸我們管了,並且每一個線程執行啓動一次,即只能調用一次start()方法。

構造方法Thread(),Thread(Runnable target);由此可見我們可以通過線程的通過構造方法給線程傳遞另一個線程,這樣我們就可以在線程的內部去調用另一個線程。


非線程安全:當多個線程之間存在共享的對象是就有可能出現運行錯誤。


currentThread()方法:該方法可返回代碼段正在被哪個線程調用的信息;例如currentThread().getName()返回當前線程名稱。
isAlive()方法判讀線程是否處於活動狀態。
sleep(long mills)的線程暫停執行一定的時間。
getId()取得線程的唯一標識。
stop()方法強制停止線程。不過已經過時。此方法有可能讓程序出現意外的錯誤。

通常停止線程,採用的是interrupt()方法;但是此方法並不會真正的停止線程的執行,只是在線程中添加了一個停止的標記,需要加入一個判讀才能讓線程停止。

interrupted()方法測試當前線程是否已經中斷,如果調用該方法時線程已經中斷,則此方法返回true,並且此方法會解除中斷狀態。所以當第二次調用該方法時會返回false;
isInterrupted()方法測試線程是否中斷但是不清除中斷狀態。

如果要停止一個線程:我們先調用interrupt()方法,然後用isInterrupted()方法判斷線程是否中斷,如果中斷則用return方法返回。

在沉睡中停止線程,會使線程拋出異常,並清除停止狀態。

suspend()方法暫停線程;此方法可能導致線程掛起並永久的持有公共對象,導致其他線程無法獲得對象進行執行。
resume()方法恢復線程執行;


yield()方法作用是放棄當前線程的CPU資源。讓給其他線程執行,但是放棄的時間不確定有可能剛放棄,馬上又獲得CPU時間片。



java中線程的優先級有十級,1到10,數字越大優先級越高,可以通過setPriority()進行設置,優先級越高的線程有更多的機會獲得cpu進行執行。























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章