并发协作模型“生产者/消费者模式“
生活随笔
收集整理的這篇文章主要介紹了
并发协作模型“生产者/消费者模式“
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- java提供了幾個方法解決線程之間的通信問題
| wait() | 表示線程一直等待,直到其他線程通知,與sleep不同,會釋放鎖 |
| wait(long timeout) | 指定等待的毫秒數 |
| notify | 喚醒一個處于等待狀態的線程 |
| notifyAll() | 喚醒同一個對象上所有調用wait()方法的線程,優先級別高的線程調度 |
注意:均是Object類的方法,都只能在同步方法或者同步代碼塊中使用,否則會拋出異常InterruptedException
管程法
- 生產者:負責生產數據的模塊(可能是方法,對象,線程,進程);
- 消費者:負責處理數據的模塊(可能是方法,對象,線程,進程);
- 緩沖區:消費者不能直接使用生產者的數據,他們之間有個”緩沖區“
生產者將生產好的數據放入緩沖區,消費者從緩沖區拿出數據
信號燈法
package com.zeng.thread; //測試生產者消費者問題2:信號燈法,標志位解決 public class TestPC2 {public static void main(String[] args) {TV tv=new TV();new Player(tv).start();new Watcher(tv).start();} }//生產者:演員 class Player extends Thread{TV tv;public Player(TV tv){this.tv=tv;}@Overridepublic void run() {for (int i = 0; i < 10; i++) {if(i%2==0){this.tv.play("披荊斬棘的哥哥播放中");}else{this.tv.play("明星大偵探");}}} }//消費者:觀眾 class Watcher extends Thread{TV tv;public Watcher(TV tv){this.tv=tv;}@Overridepublic void run() {for (int i = 0; i < 10; i++) {tv.watch();}} }//產品——>節目 class TV{//演員表演,觀眾等待T//觀眾觀看,演員等待FString voice;//表演的節目boolean flag =true;//表演public synchronized void play(String voice){if(!flag){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("演員表演了:"+voice);//通知觀眾觀看this.notifyAll();//通知喚醒this.voice=voice;this.flag=!this.flag;}//觀看public synchronized void watch(){if(flag){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("觀看了:"+voice);//通知演員表演this.notifyAll();this.flag=!this.flag;} }總結
以上是生活随笔為你收集整理的并发协作模型“生产者/消费者模式“的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白石榴的功效与作用、禁忌和食用方法
- 下一篇: 使用线程池