執行緒練習題生產者與消費者

2021-10-12 03:00:10 字數 1794 閱讀 9573

//測試類

public class test }/*

資源類:包子類

設定包子的屬性皮陷

包子狀態 有true 沒有false

*/class baozi

//包子鋪

/* 生產者(包子鋪):是乙個執行緒類,繼承thread類

設定執行緒的任務:生產包子

true:有包子

包子呼叫wait方法進入等待狀態

false:沒有包子

包子鋪生產包子

修改包子的狀態為true

喚醒吃貨執行緒,讓吃貨去吃包子

注意:包子鋪執行緒和吃貨執行緒關係---》通訊(互斥)

必須使用同步技術保證兩個執行緒只能有乙個執行緒在執行

鎖物件必須保證唯一,可以使用包子物件作為鎖物件

包子鋪執行緒和吃貨執行緒的類需要把包子物件作為引數傳遞進來

1.需要在成員的位置上建立乙個包子變數

2.使用帶參構造,為這個包子變數賦值

*/class cost extends thread

//重寫run方法

@override

public void run() catch (interruptedexception e)

}//包子鋪沒有包子,被喚醒之後,包子鋪生產包子

//增加一些難度;交替生產兩種型別的包子

if (count % 2 == 0) else

count++;

system.out.println("包子鋪正在生產:" + baozi.xian +

baozi.pi + "包子");

//生產包子需要有乙個過程;等待1秒鐘

try catch (exception e)

//包子鋪生產好了包子

//修改包子的狀態為true 有

baozi.flag = true;

//喚醒吃貨執行緒,讓吃貨執行緒去吃包子

baozi.notify();

system.out.println("包子鋪已經生產好了:" + baozi.pi

+ baozi.xian + "包子,吃貨可以去吃了。。。。");}}

}}/*

消費者(吃貨類):是乙個執行緒類

設定執行緒的任務:吃包子

對包子的狀態進行判斷

true :有包子

吃貨吃包子

吃貨吃完包子

修改包子的狀態為false:沒有包子

吃貨喚醒包子鋪執行緒,生產包子

false:沒有包子

吃貨呼叫wait方法,進入到等待狀態

*/class foodie extends thread

//3.重寫run方法

@override

public void run() catch (exception e)

}//被喚醒後執行吃包子

system.out.println("吃貨正在吃:" + baozi.pi + baozi.xian

+ "包子");

//吃貨吃完包子

//修改包子的狀態為false沒有

baozi.flag = false;

//吃貨執行緒喚醒包子鋪執行緒---》生產包子

baozi.notify();

system.out.println("吃貨已經把" + baozi.pi + baozi.xian + "的包子吃完了");

system.out.println("----------------------------------");}}

}}

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者消費者執行緒

include include include includeusing namespace std typedef int semaphore 訊號量是一種特殊的整型變數 const int size of buffer 5 緩衝區長度 const unsigned short producers...

生產者消費者執行緒

該簡單生產者 消費者執行緒,屬於本人學習過程中的一段練習 如有不足,請指點 package com.lanqiao.demo3 author 大廣子 類說明 簡單的生產者,消費者執行緒 public class threadptcs catch interruptedexception e 退出 s...