Java的線程機制

來源:互聯網
上載者:User

標籤:

一、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.