【轉】Java學習---線程間的通訊

來源:互聯網
上載者:User

標籤:Fix   監視   可重新進入   https   image   管理   一點   條件   fixed   

【原文】https://www.toutiao.com/i6572378564534993415/

兩個線程間的通訊

這是我們之前的線程。

執行效果:誰搶到資源,誰運行~

實現線程交替執行:

這裡主要用到了兩個內容

1)建立一個標記 flag,讓程式進行判斷:

當flag != 1 時,print1 進入等待,執行 print2,然後讓 flag=1,喚醒正在等待·的線程,

當flag != 0 時,print2 進入等待,執行 print1 ,讓後讓 flag=0,喚醒正在等待的線程。

2)在 object 類中有 wait() 和 notify() 方法,可以對線程進行等待和喚醒的操作

多個線程間的通訊

兩個線程搞定了,那麼再多一點呢?

這個時候用 notify() 方法就不夠了,這個方法只能喚醒單個的線程,要用notifyAll,喚醒所有正在等待的線程,然後讓他們自行匹配,誰滿足條件誰就運行~

注意:

在同步代碼塊中,用哪個對象鎖,就用那個對象調用 wait() 方法。

sleep() 和 wait() 方法的區別

這兩個方法的功能很像,但是還是有一點區別的~

第一點:

sleep()方法必須給一個參數,參數就是等待的時間,時間到了自動醒來。

wait()方法也可以傳入參數,程式在參數代表的時間結束後進入等待,不傳參數表示程式直接進入等待。

第二點:

sleep()方法在同步代碼塊或同步函數中,不釋放鎖。

wait()方法在同步代碼塊或同步函數中,釋放鎖。

JDK1.5的特性

互斥鎖 ReentrantLock

一個可重新進入的互斥鎖 Lock,它具有與使用 synchronized 方法和語句所訪問的隱式監視器鎖相同的一些基本行為和語義,但功能更強大。

這裡面有一個 newCondition()方法

可以返回一個 Condition 執行個體。 這個執行個體可以調用下面的方法,我們主要用到了圈起的兩個方法~

那麼我們實現上面的功能的代碼,就可以這樣來寫

線程的生命週期

就是一個線程的生命週期,小夥伴們看一下,學了一回線程,這個東西還是要瞭解一下的~

圖片自來網路

線程組

線程組概述

Java 中使用 ThreadGroup 來表示線程組,它可以對一批線程進行分類管理,Java 允許程式直接對線程組進行控制。

預設情況下,所有的線程都屬於主線程組。

getThreadGroup()

通過線程對象擷取他所屬於的組

getName()

通過線程組對象擷取他組的名字

我們也可以給線程設定分組

步驟如下:

1)ThreadGroup(String name) 建立線程組對象並給其賦值名字

2)建立線程對象

3)Thread(ThreadGroup, Runnable,name)

4)設定整組的優先順序或者守護線程

代碼示範:

線程池

程式啟動一個新線程成本是比較高的,因為它涉及到要與作業系統進行互動。而使用線程池可以很好的提高效能,尤其是當程式中要建立大量生存期很短的線程時,更應該考慮使用線程池。

線程池裡的每一個線程代碼結束後,並不會死亡,而是再次回到線程池中成為空白閑狀態,等待下一個對象來使用。(從JDK5開始,Java內建支援線程池)

內建線程池的使用概述

JDK5新增了一個Executors工廠類來產生線程池,有如下幾個方法

newFixedThreadPool(int nThreads)

newSingleThreadExecutor()

這些方法的傳回值是 ExecutorService 對象,該對象表示一個線程池,可以執行 Runnable 對象或者 Callable 對象代表的線程。它提供了如下方法

submit(Runnable task)

submit(Callable<T> task)

使用步驟:

1)建立線程池對象

2)建立Runnable執行個體

3)提交Runnable執行個體

4)關閉線程池

代碼示範:

【轉】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.