Java的線程機制

來源:互聯網
上載者:User

標籤:str   oid   情況   his   star   處理   實值型別   問題   指令   

一、Java中實現多線程的兩種方式
1) 繼承Thread類
Thread類包括了包括和建立線程所需的一切東西。

Thread 最重要的方法是 run()。編寫線程程式時須要覆蓋 run() 方法,run() 方法是與別的線程並行啟動並執行,故存在資源競爭和同步問題。

。Thread 還包括一個特殊的方法 start()。其作用是對線程進行特殊的初始化。然後調用run()。
調用start方法方可啟動線程,而run方法僅僅是thread的一個普通方法調用。還是在主線程裡運行。應該把須要平行處理的代碼放在run()方法中,start()方法啟動線程將自己主動調用 run()方法,這是由jvm的記憶體機制規定的。

而且run()方法必須是public訪問許可權。傳回值類型為void.。
2) 實現Runable介面
Runable介面僅僅有一個函數 run(),該函數必須由實現了該介面的類來實現。

使用 Runable 介面的時候不能直接建立所需類的對象並運行它,而必須從 Thread 類的一個執行個體內部運行。

二、線程狀態
線程生命週期中共同擁有4中狀態:新狀態、可運行狀態、死亡狀態和堵塞狀態。當中,
新狀態:線程已建立。而start()還沒有調用;
可運行狀態:線程可以運行,等待CPU時間被分配給該線程後就可以;
死亡狀態:run()返回後線程就會死亡。

或者調用stop()或者destroy()方法也會使得線程死亡。然而stop()會產生異常,destroy()則是強制終止從而沒有釋放鎖;
堵塞狀態:線程不會被分配CPU時間,無法運行。

堵塞狀態情況比較複雜,線程進入堵塞狀態的原因主要是:
1)調用sleep(ms),進入睡眠
2)調用suspend(),掛起線程。(調用resume()恢複運行)
3)調用wait(),暫停線程。(調用notify()或者notifyAll()恢複運行)
4)I/O 堵塞
5)調用還有一個處於鎖定狀態的對象的同步方法

三、對象的鎖
Java中全部對象都具有隱式關聯的監視程式,即“鎖”。

程式不用去產生一個鎖的對象,由於不論什麼對象都具有了鎖,通常在程式中都使用this對象。


與鎖有關的方法有:
1)wait()
調用該方法的線程須要等待。直到得到該對象的鎖,線程才幹繼續運行。
2)wait(long)和wait(long,int)
傳遞的參數指定了線程可以等到的最長時間。假設指定時間內沒有得到鎖,則會拋出異常interrupedException,程式處理完異常後繼續運行。
3)notify()和notifyAll()
在鎖對象上調用notify()或者notifyAll()方法就行釋放對象上的鎖。

當中,notify()僅僅能喚醒一個等待該鎖的線程;而notifyAll()則會喚醒全部等待該鎖的線程,然而被喚醒的線程中哪個會獲得鎖是由虛擬機器來決定的。

四、線程的同步
synchronized 語句通過使用對象鎖同步多個線程對某一特定程式碼片段的訪問,在不論什麼時候都僅僅能有一個線程來運行被保護的代碼。

synchronized (taskQueue) {            newTask.setTaskId(++taskCounter);            newTask.setSubmitTime(new Date());            taskQueue.add(newTask);            /* 喚醒隊列, 開始運行 */            taskQueue.notifyAll();        }
以上範例中,運行 synchronized (taskQueue) 。線程必須取得對象taskQueue的鎖。假設線程沒有擷取到對象taskQueue的鎖。線程就會停止在 synchronized 指令上。

直到線程離開 synchronized 指令保護的程式碼片段,線程會將鎖返回給對象taskQueue。

Java的線程機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.