激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java多線程編程學習(線程間通信)

java多線程編程學習(線程間通信)

2021-01-03 14:31JMCui Java教程

下面小編就為大家帶來一篇java多線程編程學習(線程間通信)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、概要

線程是操作系統中獨立的個體,但這些個體如果不經過特殊的處理就不能成為一個整體,線程間的通信就是成為整體的必用方案之一??梢哉f,使線程進行通信后,系統之間的交互性會更強大,在大大提高cpu利用率的同時還會使程序員對各線程任務在處理過程中進行有效的把控和監督。

二、等待/通知機制

1、"wait/notify"機制:等待/通知機制,wait使線程暫停運行,而notify 使暫停的線程繼續運行。用一個廚師和服務員的交互來說明:

(1) 服務員取到菜的時間取決于廚師,所以服務員就有“等待”(wait)的狀態。

(2) 廚師將菜放在“菜品傳遞臺”上,其實就相當于一種通知(notify),這時服務員才可以拿到菜并交給就餐者。

java多線程編程學習(線程間通信)

2、wait()

(1) 使當前執行代碼的線程進行等待。wait()方法是object類的方法,該方法用來將當前線程置入“預執行隊列”中,并且在wait()所在的代碼行處停止執行,直到接收通知或被中斷為止。

(2) 在調用wait()方法之前,線程必須獲得該對象的對象級別鎖,即只能在同步方法或同步塊中調用wait()方法,否則拋出illegalmonitorstateexception異常。(屬于runtime的一個子類,不需要try-catch 語句進行捕捉異常)

(3) 在調用wait()方法之后,當前線程釋放鎖,而此對象會進入線程等待池中,等待被喚醒。在從wait()返回前,線程與其他呈wait線程競爭重新獲得鎖。

(4) wait()方法可以被interrupt 打斷并拋出interruptedexception。

(5) wait(long):帶一個參數的wait(long)方法的功能是等待某一時間內是否有線程對鎖進行喚醒,如果超過這個時間則自動喚醒。

3、notify()

(1) 用來通知那些可能等待該對象的對象鎖的其他線程。如果有多個線程等待,則由線程規劃器隨機挑選出其中一個呈wait狀態的線程,對其發出通知notify,并使它等待獲取該對象的對象鎖。(注意!這里說的是等待,即在執行完notify()方法后,當前線程不會馬上釋放該對象鎖,即wait()狀態的線程也不會馬上獲得對象鎖,需要將synchronized 代碼塊中的代碼執行完后才釋放鎖!)

(2)也要在同步方法或同步塊中調用,即在調用前,線程也必須獲得該對象的對象級別鎖,否則也會拋出illegalmonitorstateexception.

(3)當notify()發出通知,卻沒有wait()線程在等待時,則不作作用。

4、notifyall()

(1) 可以使所有正在等待隊列中的 等待同一共享資源(即同一個鎖) 的"全部"線程從等待狀態退出,進入可運行狀態。

5、

java多線程編程學習(線程間通信)

java多線程編程學習(線程間通信)

6、假死:“假死”現象其實就是線程進入waiting等待狀態。如果全部線程都進入waiting狀態,則程序就不再執行任何功能了,整個項目呈停止狀態。 出現這樣的原因是因為:比如多個生產者和多個消費者的問題,“生產者”可能喚醒“生產者”,“消費者”可能喚醒“消費者”,喚醒了同類,導致線程不斷在等待。怎么解決這個問題呢?將notify() 改成 notifyall()方法即可,也就是將異類一同喚醒就可以了。

7、 jave中 管道流(pipestream)是一種特殊的流,可用于在不同的線程中直接傳送數據。一個線程發送數據到輸出管道,另一個線程從輸入管道中讀數據。通過使用管道,實現不同線程間的通信,而無須借助于類似臨時文件之類的東西。jdk中提供了四個類來使線程間可以通信,其中包括字節流(pipedoutputstream、pipedinputstream)和字符流(pipedwriter、pipedreader)。

java多線程編程學習(線程間通信)

java多線程編程學習(線程間通信)

java" id="highlighter_451242">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class run {
 public static void main(string[] args) {
  try {
   writedata writedata = new writedata();
   readdata readdata = new readdata();
   pipedoutputstream outputstream = new pipedoutputstream();
   pipedinputstream inputstream = new pipedinputstream();
   
   outputstream.connect(inputstream);//使兩個stream之間產生通信鏈接,這樣才可以將數據進行輸入輸出
 
   threadread threadread = new threadread(readdata, inputstream);
   threadread.start();
   thread.sleep(1000);
   threadwrite threadwrite = new threadwrite(writedata, outputstream);
   threadwrite.start();
  } catch (ioexception e) {
   e.printstacktrace();
  } catch (interruptedexception e) {
   e.printstacktrace();
  }
 }
}

三、方法join的使用

1、在很多情況下,主線程創建并啟動子線程,如果子線程中要進行大量的耗時計算,主線程往往將早于子線程結束之前結束。這時,如果主線程想等待子線程執行完成之后再結束,比如子線程處理一個數據,主線程要取得這個數據中的值,就要用到join()方法了。

2、join()的作用是等待線程銷毀,而使 當前線程進行無限期的阻塞,等待join()的線程銷毀后再繼續執行當前線程的代碼。

3、同樣的,join()方法可以被interrupt()方法打斷并拋出interruptedexception異常。

4、join 與 synchronized 的區別?

(1) join()在內部使用wait() 方法進行等待。

(2) synchronized 關鍵字使用的是“對象監視器”原理作為同步。

5、方法join(long) 和 sleep(long)的區別?

(1) join(long)內部采用wait(long)方法實現,當執行wait(long)方法后,當前線程的鎖被釋放,那么其他線程也可以調用此線程中的同步方法了。即 join(long)之后,該線程釋放鎖,又需要和其他線程去爭搶鎖的資源。

(2) thread.sleep(long)方法不釋放鎖。

四、類 threadlocal 的使用

1、變量值的共享可以使用public static 變量的形式,所有的線程都使用同一個public static 變量。如果想實現每一個線程都有自己的共享變量該如何解決呢?類threadlocal解決的就是每個線程綁定自己的值,可以將threadlocal類比喻成全局存放數據的盒子,盒子中可以存放每個線程的私有數據。

2、類threadlocal 具有隔離性,即每個線程都可以存入自己線程的數據而互不影響,而取到的也是自己線程存入的數據。

java多線程編程學習(線程間通信)

java多線程編程學習(線程間通信)

五、類inheritablethreadlocal的使用

1、inheritablethreadlocal類繼承于threadlocal類,所以它具有threadlocal類的特性,但又是一種特殊的threadlocal,其特殊性在于inheritablethreadlocal變量值會自動傳遞給所有子線程,而普通threadlocal變量不行;而且,通過重寫這個類中的 childvalue 方法,子線程的值可以作為父線程值的一個任意函數。

java多線程編程學習(線程間通信)

備注:

(1) 什么是子線程?

包含在 thread thread = new thread(new threadstart(delegate{
}));里面均視為子線程。(個人理解)

(2) 什么是主線程?

ui界面和main函數均為主線程,除了“不包含在thread里面的程序”均可 視為主線程。(個人理解)

以上這篇java多線程編程學習(線程間通信)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/jmcui/p/7503296.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 亚洲乱妇19p | 99精品视频久久精品视频 | 91社区电影 | 龙床上的呻吟高h | 91久久精品一区二区 | 天天操综 | 亚洲视频在线免费看 | 精品亚洲综合 | 一级电影在线免费观看 | 久久影院午夜 | 欧美一级淫片免费视频1 | 日本黄色免费片 | 一级片999 | 毛片大全免费看 | 日韩av成人| 黄在线看 | 91性高湖久久久久久久久网站 | 国产亚洲综合一区二区 | 国产精品自拍啪啪 | 国产精品久久99精品毛片三a | 99精品国产成人一区二区 | 成人三级黄色片 | 亚洲片在线 | 黄色毛片视频在线观看 | 成人羞羞视频在线观看 | www.狠狠操.com| 国产精品99久久99久久久二 | 国产亚洲精品综合一区91 | 蜜桃一本色道久久综合亚洲精品冫 | 91网站免费在线观看 | 亚洲最大久久 | 欧美视频99 | 黄色成人av在线 | 亚洲第一成人在线 | 中国的免费的视频 | 羞羞答答www网站进入 | 毛片在线免费播放 | 男女一边摸一边做羞羞视频免费 | 成年人黄色免费电影 | av免播放| 日韩一级片毛片 |