欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

詳談java線程與線程、進程與進程間通信-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、永年網(wǎng)站維護、網(wǎng)站推廣。

線程與線程間通信

一、基本概念以及線程與進程之間的區(qū)別聯(lián)系:

關(guān)于進程和線程,首先從定義上理解就有所不同

1、進程是什么?

是具有一定獨立功能的程序、它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位,重點在系統(tǒng)調(diào)度和單獨的單位,也就是說進程是可以獨 立運行的一段程序。

2、線程又是什么?

線程進程的一個實體,是CPU調(diào)度和分派的基本單位,他是比進程更小的能獨立運行的基本單位,線程自己基本上不擁有系統(tǒng)資源。

在運行時,只是暫用一些計數(shù)器、寄存器和棧 。

他們之間的關(guān)系

1、一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程(通常說的主線程)。

2、資源分配給進程,同一進程的所有線程共享該進程的所有資源。

3、線程在執(zhí)行過程中,需要協(xié)作同步。不同進程的線程間要利用消息通信的辦法實現(xiàn)同步。

4、處理機分給線程,即真正在處理機上運行的是線程。

5、線程是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體。

從三個角度來剖析二者之間的區(qū)別

1、調(diào)度:線程作為調(diào)度和分配的基本單位,進程作為擁有資源的基本單位。

2、并發(fā)性:不僅進程之間可以并發(fā)執(zhí)行,同一個進程的多個線程之間也可以并發(fā)執(zhí)行。

3、擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進程的資源。.

二、多線程間通信方式:

1、共享變量

2、wait/notify機制

3、Lock/Condition機制

4、管道

三、共享變量

線程間發(fā)送信號的一個簡單方式是在共享對象的變量里設(shè)置信號值。線程A在一個同步塊里設(shè)置boolean型成員變量hasDataToProcess為true,線程B也在同步塊里讀取hasDataToProcess這個成員變量。這個簡單的例子使用了一個持有信號的對象,并提供了set和check方法:

public class MySignal{

 protected boolean hasDataToProcess = false;

 public synchronized boolean hasDataToProcess(){
  return this.hasDataToProcess;
 }

 public synchronized void setHasDataToProcess(boolean hasData){
  this.hasDataToProcess = hasData;
 }

}

線程A和B必須獲得指向一個MySignal共享實例的引用,以便進行通信。如果它們持有的引用指向不同的MySingal實例,那么彼此將不能檢測到對方的信號。需要處理的數(shù)據(jù)可以存放在一個共享緩存區(qū)里,它和MySignal實例是分開存放的。

四、wait()/notify機制

為了實現(xiàn)線程通信,我們可以使用Object類提供的wait()、notify()、notifyAll()三個方法。調(diào)用wait()方法會釋放對該同步監(jiān)視器的鎖定。這三個方法必須由同步監(jiān)視器對象來調(diào)用,這可分成兩種情況:

•對于使用synchronized修飾的同步方法,因為該類的默認(rèn)實例是(this)就是同步監(jiān)視器,所以可以直接調(diào)用這三使用個方法。

•對于synchronized修飾的同步代碼塊,同步監(jiān)視器是synchronized括號里的對象,所以必須使用該對象調(diào)用這三個方法。

假設(shè)系統(tǒng)中有兩條線程,這兩條線程分別代表取錢者和存錢者。現(xiàn)在系統(tǒng)有一種特殊的要求,系統(tǒng)要求存款者和取錢者不斷的實現(xiàn)存款和取錢動作,而且要求每當(dāng)存款者將錢存入指定賬戶后,取錢者立即將錢取走.不允許存款者兩次存錢,也不允許取錢者兩次取錢。

我們通過設(shè)置一個旗標(biāo)來標(biāo)識賬戶中是否已有存款,有就為true,沒有就標(biāo)為false。具體代碼如下:

首先我們定義一個Account類,這個類中有取錢和存錢的兩個方法,由于這兩個方法可能需要并發(fā)的執(zhí)行取錢、存錢操作,所有將這兩個方法都修改為同步方法.(使用synchronized關(guān)鍵字)。

public class Account { 
  private String accountNo; 
  private double balance; 
  //標(biāo)識賬戶中是否有存款的旗標(biāo) 
  private boolean flag=false; 
   
  public Account() { 
    super(); 
  } 
 
  public Account(String accountNo, double balance) { 
    super(); 
    this.accountNo = accountNo; 
    this.balance = balance; 
  }  
   
  public synchronized void draw (double drawAmount){ 
     
    try { 
       if(!flag){ 
       this.wait(); 
       }else { 
         //取錢 
         System.out.println(Thread.currentThread().getName()+" 取錢:"+drawAmount); 
         balance=balance-drawAmount; 
         System.out.println("余額 : "+balance); 
         //將標(biāo)識賬戶是否已有存款的標(biāo)志設(shè)為false 
         flag=false; 
         //喚醒其它線程 
         this.notifyAll();     
       } 
      } catch (Exception e) { 
        e.printStackTrace(); 
    } 
  } 
   
   
  public synchronized void deposit(double depositAmount){ 
   try { 
       if(flag){ 
        this.wait(); 
       } 
       else{ 
         System.out.println(Thread.currentThread().getName()+"存錢"+depositAmount); 
         balance=balance+depositAmount; 
         System.out.println("賬戶余額為:"+balance); 
         flag=true; 
         //喚醒其它線程 
         this.notifyAll(); 
       } 
    } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
    } 
  } 
 
} 

網(wǎng)站標(biāo)題:詳談java線程與線程、進程與進程間通信-創(chuàng)新互聯(lián)
分享URL:http://chinadenli.net/article10/ddgcgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序網(wǎng)站內(nèi)鏈、小程序開發(fā)網(wǎng)站維護、靜態(tài)網(wǎng)站搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名