国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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多線程編程學習(線程間通信)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、概要

線程是操作系統中獨立的個體,但這些個體如果不經過特殊的處理就不能成為一個整體,線程間的通信就是成為整體的必用方案之一。可以說,使線程進行通信后,系統之間的交互性會更強大,在大大提高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 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 人人澡人人射 | 欧美在线 | 亚洲 | 精品久久一区 | 成人在线视频免费观看 | 国产一区不卡 | 在线观看精品91福利 | 欧美一区二区三区婷婷月色 | 日本高清视频在线播放 | 国产精品视频一区二区三区 | 二区在线视频 | 成人在线一区二区三区 | 欧美视频二区 | 国产精品久久久久久久久 | 日本一区二区不卡 | 亚洲小视频 | 乱人伦xxxx国语对白 | 欧美日韩在线免费观看 | 不卡的一区二区 | 成人小视频在线观看 | 午夜精品久久久久 | 精品成人久久 | 亚洲www视频| 欧美中文| 久久视精品 | 欧美日本韩国在线 | 欧美专区中文字幕 | 成人综合激情 | 成人在线播放 | 亚洲一区国产视频 | 免费 成 人 黄 色 | 九九热精品国产 | 国产精品视频免费看 | 亚洲视频1 | 亚洲国产精品一区二区三区 | 成人片网址| 一区二区三区在线观看视频 | 91麻豆精品国产91久久久更新资源速度超快 | 日韩成人片 | 国产伦精品一区二区三区高清 | 涩涩天堂| 亚洲精品国产第一综合99久久 |