真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在Java中創(chuàng)建兩個線程模擬對話

怎么在Java中創(chuàng)建兩個線程模擬對話?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

余干網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)公司公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

需求說明

怎么在Java中創(chuàng)建兩個線程模擬對話

實現(xiàn)方式

嗯 這個可以視作一個經(jīng)典的消費者和生產(chǎn)者的問題,詳細(xì)見代碼注釋

代碼內(nèi)容

消費者,負(fù)責(zé)取走生產(chǎn)者產(chǎn)生的信息

public class Consumer extends Thread{
  private MiddleMan mid = null;


  public Consumer() {
  }

  public Consumer(MiddleMan movie) {
    this.mid = movie;
  }

  @Override
  public void run() {
    //循環(huán)顯示50次電影信息
    for (int i = 0; i <1000 ; i++) {
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      this.mid.get();
    }
  }
}

生產(chǎn)者,負(fù)責(zé)生產(chǎn)信息

public class Producer implements Runnable{
  //生產(chǎn)數(shù)據(jù)
  private MiddleMan mid = null;
  private boolean flag = false;

  public Producer(MiddleMan movie) {
    this.mid = movie;
  }

  public Producer() {
  }

  @Override
  public void run() {
    //循環(huán)錄入,兩部電影交替錄人
    for (int i = 0; i <1000; i++) {
      if (flag){
        this.mid.set("jack說:","我是查水表");
        flag = false;
      } else {
        this.mid.set("rose說:","你是誰?。?);
        flag = true;
      }
    }
  }
}

信息中轉(zhuǎn)場地 負(fù)責(zé)控制生產(chǎn)和消費的節(jié)奏

package com.duo;

public class MiddleMan {
  private String name;
  private String info;
  private boolean flag = true; //設(shè)置標(biāo)志位,控制生產(chǎn)者生產(chǎn),消費者消費

  public String getName() {
    return name;
  }

  public String getInfo() {
    return info;
  }

  public MiddleMan(String name, String info) {
    this.name = name;
    this.info = info;
  }

  public MiddleMan() {
  }

  public synchronized void set(String name,String info){
    if (!flag){
      try {
        super.wait();  //當(dāng)前線程等待
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
      this.name = name;
    try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
      this.info = info;
    flag = false;  //重置標(biāo)志位,讓消費者消費
    super.notify(); //使用Object的notify方法,讓消費者線程被喚醒
  }
  public synchronized void get(){
    if (flag){
      try {
        super.wait();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
    System.out.println(this.getName()+"-"+this.getInfo());
    flag = true;
    super.notify(); //喚醒線程
  }
}

程序入口

public class Test {
  public static void main(String[] args) {
    //生產(chǎn)===>>拿走  生產(chǎn)出來就被拿走
    MiddleMan mid = new MiddleMan();
    Thread producer = new Thread(new Producer(mid));
    Thread consumer = new Thread(new Consumer(mid));
    producer.start();
    consumer.start();
  }
}

運行結(jié)果

怎么在Java中創(chuàng)建兩個線程模擬對話

看完上述內(nèi)容,你們掌握怎么在Java中創(chuàng)建兩個線程模擬對話的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


分享名稱:怎么在Java中創(chuàng)建兩個線程模擬對話
本文網(wǎng)址:http://weahome.cn/article/iggcss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部