Latest web development tutorials
×

HTML コース

HTML コース HTML 簡単な紹介 HTML エディタ HTML ファウンデーション HTML 要素 HTML プロパティ HTML 見出し HTML 段落 HTML テキストの書式設定 HTML リンク HTML ヘッド HTML CSS HTML 画像 HTML テーブル HTML リスト HTML ブロック HTML レイアウト HTML フォーム HTML フレーム HTML カラー HTML 色名 HTML カラー値 HTML スクリプト HTML 文字エンティティ HTML URL HTML クイックリスト HTML サマリー XHTML入門

HTML5

HTML5 コース HTML5 ブラウザのサポート HTML5 新要素 HTML5 Canvas HTML5 インライン SVG HTML5 MathML HTML5 ドラッグ・アンド・ドロップ HTML5 地理的な位置 HTML5 ビデオ(Video) HTML5 可聴周波数(Audio) HTML5 Input タイプ HTML5 フォーム要素 HTML5 フォームのプロパティ HTML5 セマンティック要素 HTML5 Web メモリ HTML5 Web SQL HTML5 アプリケーションキャッシュ HTML5 Web Workers HTML5 SSE HTML5 WebSocket HTML5 クイズ HTML(5)コードの仕様

HTML メディア

HTML メディア(Media) HTML ウィジェット HTML 可聴周波数(Audio) HTML ビデオプレーヤー(Videos) HTML 例

HTML リファレンスマニュアル

HTML タグリスト(アルファベット順に) HTML タグリスト(ソート機能) HTML プロパティ HTML イベント HTML キャンバス HTML 可聴周波数/ビデオ HTML 効果的な DOCTYPES HTML 色名 HTML カラーピッカー HTML 文字セット HTML ASCII HTML ISO-8859-1 HTML シンボル HTML URL コーディング HTML 言語コード HTTP ニュース HTTP ウェイ キーボードショートカット

Javaの例 - プロデューサ/コンシューマ問題

Javaの例 Javaの例

、データストレージスペースの生産者への同期間のシェアは生産者と消費者と同じメモリ空間、以下に示すように、消費者がデータにアクセスします。生産者と消費者の問題は、モデルの古典的な問題をスレッド化されていない場合の調整は、以下の条件を表示されることがあります。

メモリがいっぱいで、生産者は、消費者は、このように製品のスペースへの追加、製品、消費者支出を待っている製品の生産を除去するための余地を作るためにプロデューサーを待って、それを占有します。 デッドロックが発生するように、お互いを待っています。

Javaの例 - プロデューサ/コンシューマ問題

次の例では、スレッドによってプロデューサ/コンシューマの問題を解決する方法を示しています。

/*
 author by w3cschool.cc
 ProducerConsumerTest.java
 */

public class ProducerConsumerTest {
   public static void main(String[] args) {
      CubbyHole c = new CubbyHole();
      Producer p1 = new Producer(c, 1);
      Consumer c1 = new Consumer(c, 1);
      p1.start(); 
      c1.start();
   }
}
class CubbyHole {
   private int contents;
   private boolean available = false;
   public synchronized int get() {
      while (available == false) {
         try {
            wait();
         }
         catch (InterruptedException e) {
         }
      }
      available = false;
      notifyAll();
      return contents;
   }
   public synchronized void put(int value) {
      while (available == true) {
         try {
            wait();
         }
         catch (InterruptedException e) { 
         } 
      }
      contents = value;
      available = true;
      notifyAll();
   }
}

class Consumer extends Thread {
   private CubbyHole cubbyhole;
   private int number;
   public Consumer(CubbyHole c, int number) {
      cubbyhole = c;
      this.number = number;
   }
   public void run() {
      int value = 0;
         for (int i = 0; i < 10; i++) {
            value = cubbyhole.get();
            System.out.println("消费者 #" + this.number+ " got: " + value);
         }
    }
}

class Producer extends Thread {
   private CubbyHole cubbyhole;
   private int number;

   public Producer(CubbyHole c, int number) {
      cubbyhole = c;
      this.number = number;
   }

   public void run() {
      for (int i = 0; i < 10; i++) {
         cubbyhole.put(i);
         System.out.println("生产者 #" + this.number + " put: " + i);
         try {
            sleep((int)(Math.random() * 100));
         } catch (InterruptedException e) { }
      }
   }
}

上記のコードは出力され実行されます。

消费者 #1 got: 0
生产者 #1 put: 0
生产者 #1 put: 1
消费者 #1 got: 1
生产者 #1 put: 2
消费者 #1 got: 2
生产者 #1 put: 3
消费者 #1 got: 3
生产者 #1 put: 4
消费者 #1 got: 4
生产者 #1 put: 5
消费者 #1 got: 5
生产者 #1 put: 6
消费者 #1 got: 6
生产者 #1 put: 7
消费者 #1 got: 7
生产者 #1 put: 8
消费者 #1 got: 8
生产者 #1 put: 9
消费者 #1 got: 9

Javaの例 Javaの例