91精品人妻系列动画无码 - 国产精品夜间视频香蕉 - 91丝袜人妻一区二区三区 - 久久伊伊香蕉精品网站

信盈達—您身邊的嵌入式&人工智能專家
全國免費咨詢熱線:400-8788-909

Java中的線程之線程間的通信

時間:2018-07-24 00:00:00 來源:信盈達 作者:信盈達

hello各位小伙伴

今天我們來搞一下

線程之間的通信

讓線程按照我們的想法來執(zhí)行

Java的兩個線程間的通信

這是我們之前的線程。

Java中的線程之線程間的通信

執(zhí)行效果:誰搶到資源,誰運行~

Java中的線程之線程間的通信

實現線程交替執(zhí)行:

Java中的線程之線程間的通信

這里主要用到了兩個內容

1)創(chuàng)建一個標記 flag,讓程序進行判斷:

flag != 1 時,print1 進入等待,執(zhí)行 print2,然后讓 flag=1,喚醒正在等待·的線程,

flag != 0 時,print2 進入等待,執(zhí)行 print1 ,讓后讓 flag=0,喚醒正在等待的線程。

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

 Java中的線程之線程間的通信

多個線程間的通信

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

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

Java中的線程之線程間的通信

注意:

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

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

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

第一點:

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

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

 

第二點:

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

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

 

JDK1.5的特性

 

互斥鎖 ReentrantLock

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

這里面有一個 newCondition()方法

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

Java中的線程之線程間的通信

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

Java中的線程之線程間的通信

線程的生命周期

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

 

線程組

 

線程組概述

 

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

 

默認情況下,所有的線程都屬于主線程組。

 

getThreadGroup()

 

通過線程對象獲取他所屬于的組

 

getName()

 

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


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

 

步驟如下:

 

1)ThreadGroup(String name) 創(chuàng)建線程組對象并給其賦值名字

 

2)創(chuàng)建線程對象

 

3)Thread(ThreadGroup, Runnable,name)

 

4)設置整組的優(yōu)先級或者守護線程

 

代碼演示:

 

線程池

 

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

 

線程池里的每一個線程代碼結束后,并不會死亡,而是再次回到線程池中成為空閑狀態(tài),等待下一個對象來使用。(從JDK5開始,Java內置支持線程池)

 

內置線程池的使用概述

 

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

 

newFixedThreadPool(int nThreads)

 

newSingleThreadExecutor()

 

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

 

submit(Runnable task)

 

submit(Callable<T> task)

 

使用步驟:

 

1)創(chuàng)建線程池對象

 

2)創(chuàng)建Runnable實例

 

3)提交Runnable實例

 

4)關閉線程池

 

代碼演示:

 Java中的線程之線程間的通信

信盈達2008年在深圳特區(qū)南山高新科技園成立。自成立至今近九年來專注為企業(yè)和個人提供高端方案設計、高端嵌入式/Android培訓等服務。公司下設信盈達實訓學院、信盈達研發(fā)中心、信盈達教學儀器三大業(yè)務板塊。九年來公司堅持"技術領先、服務領先",以雄厚的實力和專業(yè)的品質成為國內唯一有實力從產品最底層研發(fā)到系統層開發(fā)的嵌入式實訓、產品解決方案提供商。為中國IT行業(yè)提供最具價值的職業(yè)教育服務。專業(yè)培訓i嵌入式、物聯網、人工智能、Java、單片機等課程,想了解更多信息點擊立馬咨詢

Java中的線程之線程間的通信