成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么在Java中實(shí)現(xiàn)多線程通信-創(chuàng)新互聯(lián)

本篇文章為大家展示了怎么在Java中實(shí)現(xiàn)多線程通信,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了信宜免費(fèi)建站歡迎大家使用!

1、共享變量

線程間通信可以通過(guò)發(fā)送信號(hào),發(fā)送信號(hào)的一個(gè)簡(jiǎn)單方式是在共享對(duì)象的變量里設(shè)置信號(hào)值。線程A在一個(gè)同步塊里設(shè)置boolean型成員變量hasDataToProcess為true,線程B也在同步代碼塊里讀取hasDataToProcess這個(gè)成員變量。這個(gè)簡(jiǎn)單的例子使用了一個(gè)持有信號(hào)的對(duì)象,并提供了set和get方法。

public class MySignal1 {
  //共享的變量
  private boolean hasDataToProcess = false;

  //取值
  public boolean getHasDataProcess() {
    return hasDataToProcess;
  }

  //存值
  public void setHasDataToProcess(boolean hasDataToProcess) {
    this.hasDataToProcess = hasDataToProcess;
  }

  public static void main(String[] args) {
    //同一個(gè)對(duì)象
    final MySignal1 my = new MySignal1();
    //線程1設(shè)置hasDataToProcess值為true
    final Thread t1 = new Thread(new Runnable() {
      @Override
      public void run() {
        my.setHasDataToProcess(true);
      }
    });
    t1.start();
    //線程2取這個(gè)值hasDataToProcess
    Thread t2 = new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          //等待線程1完成后取值
          t1.join();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        my.getHasDataProcess();
        System.out.println("t1改變以后的值:"+my.getHasDataProcess());
      }
    });
    t2.start();
  }
}

運(yùn)行結(jié)果如下:

t1改變以后的值:true

2、等待/喚醒(wait/notify)機(jī)制

以資源為例,生產(chǎn)者生產(chǎn)一個(gè)資源,通知消費(fèi)者就消費(fèi)掉一個(gè)資源,生產(chǎn)者繼續(xù)生產(chǎn)資源,消費(fèi)者消費(fèi)資源,以此循環(huán),代碼如下。

import sun.security.util.Password;

//資源類
class Resource {
  private String name;
  private int count = 1;
  private boolean flag = false;

  public synchronized void set(String name) {
    //生產(chǎn)資源
    while (flag) {
      try {
        //線程等待
        wait();
      } catch (InterruptedException e) {
      }
    }
    this.name = name + "----" + count + "+++++";
    System.out.println(Thread.currentThread().getName() + "..生產(chǎn)者..." + this.name);
    flag = true;
    //喚醒等待中的消費(fèi)者
    this.notifyAll();
  }

  public synchronized void out() {
    //消費(fèi)資源
    while (!flag) {
      try {
        //線程等待,生產(chǎn)者生產(chǎn)資源
        wait();
      } catch (InterruptedException e) {
      }
    }
    System.out.println(Thread.currentThread().getName() + "...消費(fèi)者..." + this.name);
    flag = false;
    //喚醒消費(fèi)者,生產(chǎn)資源
    this.notifyAll();
  }
}

//生產(chǎn)者
class Producer implements Runnable {
  private Resource rs;

  public Producer(Resource rs) {
    this.rs = rs;
  }

  //生產(chǎn)者生產(chǎn)資源
  @Override
  public void run() {
    while (true) {
      rs.set("商品");
    }
  }
}

//消費(fèi)者消費(fèi)資源
class Consumer implements Runnable {
  private Resource rs;

  public Consumer(Resource rs) {
    this.rs = rs;
  }

  //消費(fèi)者消費(fèi)資源
  @Override
  public void run() {
    while (true) {
      rs.out();
    }
  }
}

public class ProducerConsumerDemo {
  public static void main(String[] args) {
    Resource r = new Resource();
    Producer p = new Producer(r);
    Consumer c = new Consumer(r);
    Thread t1 = new Thread(p);
    Thread t2 = new Thread(c);
    t1.start();
    t2.start();
  }
}

運(yùn)行結(jié)果如下:

Thread-0..生產(chǎn)者...商品----1+++++
Thread-1...消費(fèi)者...商品----1+++++
Thread-0..生產(chǎn)者...商品----1+++++
Thread-1...消費(fèi)者...商品----1+++++
Thread-0..生產(chǎn)者...商品----1+++++
Thread-1...消費(fèi)者...商品----1+++++
Thread-0..生產(chǎn)者...商品----1+++++

上述內(nèi)容就是怎么在Java中實(shí)現(xiàn)多線程通信,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站jinyejixie.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前名稱:怎么在Java中實(shí)現(xiàn)多線程通信-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://jinyejixie.com/article42/dehoec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站全網(wǎng)營(yíng)銷推廣、微信小程序、網(wǎng)站收錄、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站排名

廣告

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

營(yíng)銷型網(wǎng)站建設(shè)
赤城县| 柳江县| 寿光市| 商城县| 漯河市| 土默特左旗| 乐东| 湟中县| 运城市| 通许县| 南昌县| 玉树县| 德昌县| 霍邱县| 晋州市| 兴海县| 金湖县| 石柱| 义马市| 横山县| 沛县| 靖远县| 茶陵县| 南华县| 隆尧县| 枣庄市| 宜春市| 枝江市| 丰都县| 县级市| 赫章县| 高州市| 江达县| 楚雄市| 筠连县| 沂南县| 乌审旗| 卓尼县| 黄平县| 彭泽县| 马尔康县|