A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package cn.itcast.demo03_生产和消费者问题;

  2. public class SetThread extends Thread{
  3.         private BaoziPu bzp;
  4.         public SetThread(BaoziPu b){
  5.                 this.bzp = b;
  6.         }
  7.         @Override
  8.         public void run() {
  9.                 while(true){
  10.                         try {
  11.                                 Thread.sleep(1000);
  12.                         } catch (InterruptedException e) {
  13.                                 e.printStackTrace();
  14.                         }
  15.                         bzp.setBaozi("包子");
  16.                 }
  17.         }
  18. }
  19. package cn.itcast.demo03_生产和消费者问题;

  20. public class GetThread extends Thread{
  21.         private BaoziPu bzp;
  22.         public GetThread(BaoziPu bzp){
  23.                 this.bzp = bzp;
  24.         }
  25.        
  26.         @Override
  27.         public void run() {
  28.                 while(true){
  29.                         String s = this.bzp.getBaozi();
  30.                         System.out.println(s);
  31.                 }
  32.         }
  33. }
  34. package cn.itcast.demo03_生产和消费者问题;
  35. /*
  36. * 生产和消费者线程:
  37. *
  38. * 1.此例只适用于:"单生产者" 和 "单消费者" "模式";(至于多生产和多消费,可以上网搜索相关资料)
  39. * 2.让当前访问的线程等待:Object-->wait();
  40. *   唤醒当前所有等待的线程:Object --> notify()或notifyAll()
  41. * 3.wait()以及notify()和notifyAll()语句,必须放在"同步代码块"或"同步方法"内,否则抛出异常;
  42. */
  43. public class Demo {
  44.         public static void main(String[] args) {
  45.                 BaoziPu bzp = new BaoziPu();
  46.                 SetThread setThread = new SetThread(bzp);
  47.                 GetThread getThread = new GetThread(bzp);
  48.                
  49.                 setThread.start();
  50.                 getThread.start();
  51.                
  52.         }
  53. }
  54. package cn.itcast.demo03_生产和消费者问题;

  55. import java.util.ArrayList;
  56. import java.util.List;

  57. public class BaoziPu {
  58.         private List<String> bzList = new ArrayList<>();
  59.        
  60.         public synchronized void setBaozi(String s){
  61.                 this.bzList.add(s);
  62.                 System.out.println("唤醒所有等待的消费者......");
  63.                 notifyAll();//notify()
  64.                
  65.         }
  66.         public synchronized String getBaozi(){
  67.                 /*if(bzList.size() > 0){
  68.                         String s = bzList.get(0);
  69.                         bzList.remove(0);
  70.                         return s;
  71.                 }else{
  72.                         return null;
  73.                 }*/
  74.                 if(this.bzList.size() == 0){
  75.                         //让消费方等待
  76.                         try {
  77.                                 System.out.println("没包子了,等会......");
  78.                                 wait();
  79.                                 System.out.println("来包子啦......");
  80.                         } catch (InterruptedException e) {
  81.                                 e.printStackTrace();
  82.                         }
  83.                 }
  84.                 //取包子
  85.                 String s = bzList.get(0);
  86.                 bzList.remove(0);
  87.                 return s;
  88.         }
  89. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马