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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁岩 中级黑马   /  2012-10-15 08:53  /  1907 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丁岩 于 2012-10-15 08:56 编辑
  1. package Packs;
  2. import java.io.IOException;
  3. import java.util.*;
  4. public class SR
  5. {
  6.   public static void main(String[]args) throws IOException
  7. {
  8.    ArrayList<Goods> al=new ArrayList<Goods>();
  9.    Room r=new Room(100,al);//库存上限
  10.   Producer pd=new Producer(al,r);//生产者
  11.   Customer ct=new Customer(al,r);//消费者
  12. //输入货物
  13. Thread t1=new Thread(pd); //创建生产者进程
  14. Thread t2=new Thread(ct);//创建消费者进程1
  15. Thread t3=new Thread(ct);//创建消费者进程2
  16. t1.start();
  17. t2.start();
  18. t3.start();

  19. //打印货物

  20. }

  21. }

  22. class Customer implements Runnable
  23. {
  24. private ArrayList<Goods>al=null;
  25. private Room r;

  26. public Customer(ArrayList<Goods>al,Room r)
  27. {
  28. this.r=r;
  29. this.al=al;

  30. }

  31. public void run()
  32. {

  33. synchronized(r)
  34. {
  35. if(!(r.flag))
  36. {
  37. try {
  38. r.wait();
  39. } catch (InterruptedException e)
  40. {
  41. // TODO Auto-generated catch block
  42. e.printStackTrace();
  43. }
  44. }

  45. System.out.println("\n取货员来了!!!");
  46. Random rm=new Random();

  47. while(!al.isEmpty())//假如集合不空的话,我就随机打印,然后移除打印对象
  48. {
  49. int m=rm.nextInt(al.size());
  50. if(al.get(m)!=null)
  51. {
  52. System.out.println(Thread.currentThread().getName()+"——"+al.get(m).name+"\t"+al.get(m).price+"元");
  53. Thread.yield();
  54. al.remove(m);
  55. }
  56. }
  57. r.flag=false;
  58. r.notify();
  59. }

  60. }

  61. }

  62. class Producer implements Runnable
  63. {
  64. ArrayList<Goods> al=null;
  65. Room r=null;
  66. Producer(ArrayList<Goods> al,Room r)
  67. {
  68. this.al=al;
  69. this.r=r;
  70. }

  71. public void Input() throws IOException//手动输入的部分,但是便于测试没有启动
  72. {

  73. System.out.println("请存入商品的名称和价格以空格分隔,回车确认");
  74. BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  75. String line=null;
  76. int num=0;
  77. while((line=bufr.readLine())!=null)
  78. {
  79. if("over".equals(line))
  80. {
  81. break;
  82. }

  83. String[] msg=line.split(" ");
  84. if(num<=r.max-1)
  85. {
  86. try
  87. {
  88. al.add(new Goods(msg[0],new Float(msg[1])));
  89. }
  90. catch(Exception e)
  91. {
  92. System.out.println("存在非法输入");

  93. }
  94. num++;

  95. }

  96. }
  97. }

  98. public void produce()//产生随机对象,存入集合
  99. {
  100. System.out.println("自动存入货物");
  101. Random rm=new Random();

  102. while(al.size()!=r.max)
  103. {
  104. int m=rm.nextInt(100);
  105. int n=rm.nextInt(100);
  106. al.add(new Goods(String.valueOf(m),new Float(n)));
  107. }
  108. }
  109. public void run()
  110. {
  111. synchronized(r)
  112. {
  113. if(r.flag)
  114. {
  115. try {
  116. r.wait();
  117. } catch (InterruptedException e) {

  118. e.printStackTrace();
  119. }
  120. }
  121. //Input();
  122. produce();
  123. if(r.isFull())
  124. System.out.println("仓库已满不能存货");
  125. r.showGoods();
  126. r.flag=true;
  127. r.notifyAll();
  128. }
  129. }
  130. }

  131. class Room
  132. {
  133. public int max;
  134. private ArrayList<Goods>al=null;
  135. public boolean flag;
  136. public Room(int max,ArrayList<Goods>al)
  137. {
  138. this.max=max;
  139. this.al=al;
  140. flag=false;
  141. }
  142. public boolean isFull()
  143. {
  144. flag=false;
  145. if(al.size()==max)
  146. flag=true;
  147. return flag;
  148. }

  149. public void showGoods()
  150. {
  151. int num=1;
  152. if(!al.isEmpty())
  153. {
  154. System.out.println("已存入货物");
  155. System.out.println("编号\t名称\t价格");
  156. }
  157. Iterator it=al.iterator();

  158. while(it.hasNext())
  159. {
  160. Object obj=it.next();
  161. Goods p=(Goods)obj;
  162. System.out.println("("+num+")\t"+p.name+"\t"+p.price+"元");
  163. num++;
  164. }

  165. }

  166. }

  167. class Goods
  168. {
  169. public String name;
  170. public float price;
  171. public Goods(String name,float price )
  172. {
  173. this.name=name;
  174. this.price=price;
  175. }

  176. public Goods()
  177. {

  178. }




  179. }
复制代码
运行结果是:
自动存入货物
仓库已满不能存货
已存入货物
编号 名称 价格
(1) 23 9.0元
(2) 45 19.0元
(3) 37 46.0元
(4) 75 9.0元
(5) 77 90.0元
(6) 19 35.0元
(7) 41 66.0元
(8) 87 8.0元
(9) 38 11.0元
(10) 58 88.0元
(11) 51 52.0元
(12) 97 67.0元
(13) 91 73.0元
(14) 24 7.0元
(15) 83 25.0元
(16) 35 24.0元
(17) 86 70.0元
(18) 55 46.0元
(19) 58 86.0元
(20) 37 31.0元
(21) 28 34.0元
(22) 38 8.0元
(23) 74 97.0元
(24) 52 65.0元
(25) 85 74.0元
(26) 41 32.0元
(27) 23 60.0元
(28) 22 81.0元
(29) 52 32.0元
(30) 83 25.0元
(31) 42 74.0元
(32) 54 11.0元
(33) 42 81.0元
(34) 53 48.0元
(35) 50 95.0元
(36) 46 83.0元
(37) 0 80.0元
(38) 6 96.0元
(39) 69 0.0元
(40) 33 78.0元
(41) 35 53.0元
(42) 58 88.0元
(43) 0 44.0元
(44) 95 73.0元
(45) 37 99.0元
(46) 97 44.0元
(47) 88 44.0元
(48) 26 95.0元
(49) 7 21.0元
(50) 14 24.0元
(51) 14 46.0元
(52) 92 63.0元
(53) 51 89.0元
(54) 38 11.0元
(55) 16 45.0元
(56) 10 67.0元
(57) 89 11.0元
(58) 33 21.0元
(59) 12 8.0元
(60) 4 61.0元
(61) 43 35.0元
(62) 77 73.0元
(63) 61 14.0元
(64) 19 70.0元
(65) 70 62.0元
(66) 63 91.0元
(67) 66 28.0元
(68) 73 45.0元
(69) 72 48.0元
(70) 51 66.0元
(71) 36 86.0元
(72) 45 44.0元
(73) 66 36.0元
(74) 33 27.0元
(75) 65 87.0元
(76) 73 99.0元
(77) 45 22.0元
(78) 52 95.0元
(79) 93 45.0元
(80) 81 6.0元
(81) 50 76.0元
(82) 0 60.0元
(83) 81 50.0元
(84) 84 35.0元
(85) 44 10.0元
(86) 57 97.0元
(87) 33 20.0元
(88) 79 33.0元
(89) 62 97.0元
(90) 23 29.0元
(91) 49 70.0元
(92) 35 94.0元
(93) 79 62.0元
(94) 61 39.0元
(95) 44 97.0元
(96) 9 69.0元
(97) 64 84.0元
(98) 52 4.0元
(99) 57 15.0元
(100) 29 64.0元
取货员来了!!!
Thread-2——46 83.0元
Thread-2——12 8.0元
Thread-2——52 4.0元
Thread-2——77 90.0元
Thread-2——95 73.0元
Thread-2——84 35.0元
Thread-2——49 70.0元
Thread-2——33 20.0元
Thread-2——36 86.0元
Thread-2——33 78.0元
Thread-2——73 45.0元
Thread-2——7 21.0元
Thread-2——42 81.0元
Thread-2——35 24.0元
Thread-2——79 62.0元
Thread-2——45 19.0元
Thread-2——97 67.0元
Thread-2——52 95.0元
Thread-2——9 69.0元
Thread-2——57 15.0元
Thread-2——42 74.0元
Thread-2——19 70.0元
Thread-2——62 97.0元
Thread-2——44 97.0元
Thread-2——38 11.0元
Thread-2——79 33.0元
Thread-2——92 63.0元
Thread-2——57 97.0元
Thread-2——0 60.0元
Thread-2——83 25.0元
Thread-2——89 11.0元
Thread-2——81 6.0元
Thread-2——35 94.0元
Thread-2——35 53.0元
Thread-2——51 52.0元
Thread-2——54 11.0元
Thread-2——53 48.0元
Thread-2——4 61.0元
Thread-2——22 81.0元
Thread-2——23 60.0元
Thread-2——77 73.0元
Thread-2——29 64.0元
Thread-2——37 31.0元
Thread-2——65 87.0元
Thread-2——50 95.0元
Thread-2——91 73.0元
Thread-2——28 34.0元
Thread-2——64 84.0元
Thread-2——45 22.0元
Thread-2——51 66.0元
Thread-2——44 10.0元
Thread-2——0 80.0元
Thread-2——69 0.0元
Thread-2——81 50.0元
Thread-2——58 86.0元
Thread-2——55 46.0元
Thread-2——83 25.0元
Thread-2——23 9.0元
Thread-2——43 35.0元
Thread-2——58 88.0元
Thread-2——97 44.0元
Thread-2——19 35.0元
Thread-2——45 44.0元
Thread-2——38 8.0元
Thread-2——85 74.0元
Thread-2——50 76.0元
Thread-2——93 45.0元
Thread-2——66 28.0元
Thread-2——26 95.0元
Thread-2——61 14.0元
Thread-2——33 27.0元
Thread-2——41 66.0元
Thread-2——52 65.0元
Thread-2——6 96.0元
Thread-2——88 44.0元
Thread-2——16 45.0元
Thread-2——58 88.0元
Thread-2——74 97.0元
Thread-2——51 89.0元
Thread-2——37 99.0元
Thread-2——14 46.0元
Thread-2——86 70.0元
Thread-2——66 36.0元
Thread-2——63 91.0元
Thread-2——72 48.0元
Thread-2——70 62.0元
Thread-2——52 32.0元
Thread-2——75 9.0元
Thread-2——41 32.0元
Thread-2——23 29.0元
Thread-2——73 99.0元
Thread-2——61 39.0元
Thread-2——14 24.0元
Thread-2——0 44.0元
Thread-2——10 67.0元
Thread-2——37 46.0元
Thread-2——87 8.0元
Thread-2——24 7.0元
Thread-2——33 21.0元
Thread-2——38 11.0元

但是明明我Custmoe线程做了两个,为什么只有Thread2再输出啊,Thread1哪去了,怎么把他弄成Thread 1,2交替的样子啊

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 刷屏玩。。。。

查看全部评分

0 个回复

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