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

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

Java同步方法怎么實現(xiàn)-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“Java同步方法怎么實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java同步方法怎么實現(xiàn)”吧!

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),平頂山企業(yè)網(wǎng)站建設(shè),平頂山品牌網(wǎng)站建設(shè),網(wǎng)站定制,平頂山網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,平頂山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

  常用的同步方法是采用信號或加鎖機制,確保資源在任意時刻至多被一個線程訪問。Java語言在多線程編程上實現(xiàn)了完全對象化,提供了對同步機制的良好支持。

  在Java中一共有四種方法支持同步,其中前三個是同步方法,一個是管道方法。管道方法不建議使用,阻塞隊列方法在問題4已有描述,現(xiàn)只提供前兩種實現(xiàn)方法。

  - wait()/notify()方法

  - await()/signal()方法

  - BlockingQueue阻塞隊列方法

  - PipedInputStream/PipedOutputStream

  一、生產(chǎn)者類:

  ```

  public class Producer extends Thread { // 每次生產(chǎn)的產(chǎn)品數(shù)量

  private int num;

  // 所在放置的倉庫

  private Storage storage;

  // 構(gòu)造函數(shù),設(shè)置倉庫

  public Producer(Storage storage) {

  this.storage = storage;

  }

  // 線程run函數(shù)

  public void run() {

  produce(num);

  }

  // 調(diào)用倉庫Storage的生產(chǎn)函數(shù)

  public void produce(int num) {

  storage.produce(num);

  }

  public int getNum() {

  return num;

  }

  public void setNum(int num) {

  this.num = num;

  }

  public Storage getStorage() {

  return storage;

  }

  public void setStorage(Storage storage) {

  this.storage = storage;

  }

  }

  ```

  二、消費者類:

  ```

  public class Consumer extends Thread { // 每次消費的產(chǎn)品數(shù)量

  private int num;

  // 所在放置的倉庫

  private Storage storage;

  // 構(gòu)造函數(shù),設(shè)置倉庫

  public Consumer(Storage storage) {

  this.storage = storage;

  }

  // 線程run函數(shù)

  public void run() {

  consume(num);

  }

  // 調(diào)用倉庫Storage的生產(chǎn)函數(shù)

  public void consume(int num) {

  storage.consume(num);

  }

  // get/set方法

  public int getNum() {

  return num;

  }

  public void setNum(int num) {

  this.num = num;

  }

  public Storage getStorage() {

  return storage;

  }

  public void setStorage(Storage storage) {

  this.storage = storage;

  }

  }

  ```

  倉庫類:(wait()/notify()方法)

  ```

  public class Storage { // 倉庫大存儲量

  private final int MAX_SIZE = 100;

  // 倉庫存儲的載體

  private LinkedList list = new LinkedList();

  // 生產(chǎn)num個產(chǎn)品

  public void produce(int num) {

  // 同步代碼段

  synchronized (list) {

  // 如果倉庫剩余容量不足

  while (list.size() + num > MAX_SIZE) {

  System.out.print("【要生產(chǎn)的產(chǎn)品數(shù)量】:" + num);

  System.out.println(" 【庫存量】:" + list.size() + " 暫時不能執(zhí)行生產(chǎn)任務(wù)!");

  try {

  list.wait();// 由于條件不滿足,生產(chǎn)阻塞

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  }

  // 生產(chǎn)條件滿足情況下,生產(chǎn)num個產(chǎn)品

  for (int i = 1; i <= num; ++i) {

  list.add(new Object());

  }

  System.out.print("【已經(jīng)生產(chǎn)產(chǎn)品數(shù)】:" + num);

  System.out.println(" 【現(xiàn)倉儲量為】:" + list.size());

  list.notifyAll();

  }

  }

  // 消費num個產(chǎn)品

  public void consume(int num) {

  // 同步代碼段

  synchronized (list) {

  // 如果倉庫存儲量不足

  while (list.size() < num) {

  System.out.print("【要消費的產(chǎn)品數(shù)量】:" + num);

  System.out.println(" 【庫存量】:" + list.size() + " 暫時不能執(zhí)行生產(chǎn)任務(wù)!");

  try {

  // 由于條件不滿足,消費阻塞

  list.wait();

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  }

  // 消費條件滿足情況下,消費num個產(chǎn)品

  for (int i = 1; i <= num; ++i) {

  list.remove();

  }

  System.out.print("【已經(jīng)消費產(chǎn)品數(shù)】:" + num);

  System.out.println(" 【現(xiàn)倉儲)量為】:" + list.size());

  list.notifyAll();

  }

  }

  // get/set方法

  public LinkedList getList() {

  return list;

  }

  public void setList(LinkedList list) {

  this.list = list;

  }

  public int getMAX_SIZE() {

  return MAX_SIZE;

  }

  }

  ```

  倉庫類:(await()/signal()方法)

  ```

  public class Storage { // 倉庫大存儲量

  // 倉庫大存儲量

  private final int MAX_SIZE = 100;

  // 倉庫存儲的載體

  private LinkedList list = new LinkedList();

  // 鎖

  private final Lock lock = new ReentrantLock();

  // 倉庫滿的條件變量

  private final Condition full = lock.newCondition();

  // 倉庫空的條件變量

  private final Condition empty = lock.newCondition();

  // 生產(chǎn)num個產(chǎn)品

  public void produce(int num) {

  // 獲得鎖

  lock.lock();

  // 如果倉庫剩余容量不足

  while (list.size() + num > MAX_SIZE) {

  System.out.print("【要生產(chǎn)的產(chǎn)品數(shù)量】:" + num);

  System.out.println(" 【庫存量】:" + list.size() + " 暫時不能執(zhí)行生產(chǎn)任務(wù)!");

  try {

  // 由于條件不滿足,生產(chǎn)阻塞

  full.await();

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  }

  // 生產(chǎn)條件滿足情況下,生產(chǎn)num個產(chǎn)品

  for (int i = 1; i <= num; ++i) {

  list.add(new Object());

  }

  System.out.print("【已經(jīng)生產(chǎn)產(chǎn)品數(shù)】:" + num);

  System.out.println(" 【現(xiàn)倉儲量為】:" + list.size());

  // 喚醒其他所有線程

  full.signalAll();

  empty.signalAll();

  // 釋放鎖

  lock.unlock();

  }

  // 消費num個產(chǎn)品

  public void consume(int num) {

  // 獲得鎖

  lock.lock();

  // 如果倉庫存儲量不足

  while (list.size() < num) {

  System.out.print("【要消費的產(chǎn)品數(shù)量】:" + num);

  System.out.println(" 【庫存量】:" + list.size() + " 暫時不能執(zhí)行生產(chǎn)任務(wù)!");

  try {

  // 由于條件不滿足,消費阻塞

  empty.await();

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  }

  // 消費條件滿足情況下,消費num個產(chǎn)品

  for (int i = 1; i <= num; ++i) {

  list.remove();

  }

  System.out.print("【已經(jīng)消費產(chǎn)品數(shù)】:" + num);

  System.out.println(" 【現(xiàn)倉儲)量為】:" + list.size());

  // 喚醒其他所有線程

  full.signalAll();

  empty.signalAll();

  // 釋放鎖

  lock.unlock();

  }

  // set/get方法

  public int getMAX_SIZE() {

  return MAX_SIZE;

  }

  public LinkedList getList() {

  return list;

  }

  public void setList(LinkedList list) {

  this.list = list;

  }

  }

到此,相信大家對“Java同步方法怎么實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!


分享題目:Java同步方法怎么實現(xiàn)-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/dchohi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部