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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 奔来的黑马 中级黑马   /  2015-1-6 21:37  /  1425 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程中,多消费者,多生产者好麻烦啊 。。 求师兄师姐给发几个有代表性的代码。。  

7 个回复

倒序浏览
售票的代码,参考下吧。
  1. public class Test7 {

  2.         public static void main(String[] args) {
  3.                
  4.                 Ticket tk = new Ticket();//建立票信息对象
  5.                 TicketSealCenter tsc = new TicketSealCenter(tk);// 创建售票中心。
  6.                 tsc.set(200);//售票中心分配一定数量的票
  7.                
  8.                 new Thread(new SealWindow(tk,"一号窗口")).start();// 创建、启动线程,开始卖票。
  9.                 new Thread(new SealWindow(tk,"二号窗口")).start();
  10.                 new Thread(new SealWindow(tk,"三号窗口")).start();
  11.                 new Thread(new SealWindow(tk,"四号窗口")).start();
  12.                                
  13.                                
  14.                
  15.                
  16.         }
  17. }



  18. class Ticket//票信息类
  19. {
  20.         private int ticket;//票数

  21.         public int getTicket()//获取票数
  22.         {
  23.                 return ticket;
  24.         }

  25.         public void setTicket(int ticket)//设置票数。
  26.         {
  27.                 this.ticket = ticket;
  28.         }

  29.        
  30. }

  31. class TicketSealCenter// 售票中心类
  32. {
  33.         private Ticket tk;

  34.         public TicketSealCenter(Ticket tk)//一初始化就有票信息。
  35.         {
  36.                 this.tk = tk;
  37.         }
  38.        
  39.         public void set(int t)//分配一定数量的票
  40.         {
  41.                 tk.setTicket(t);
  42.                
  43.         }
  44.        

  45. }

  46. class SealWindow implements Runnable // 售票窗口类
  47. {
  48.        
  49.         private Ticket tk;
  50.         private String name;
  51.         public SealWindow(Ticket tk,String name)// 一初始化就有票信息和窗口名字。
  52.         {
  53.                 this.tk = tk;
  54.                 this.name = name;
  55.         }
  56.        
  57.                
  58.         public void run()//  里面是多线程执行的卖票代码。
  59.         {
  60.                
  61.                 while(true)//循环卖票
  62.                 {       
  63.                         synchronized(tk)//同步代码块,保证多线程的安全性。
  64.                         {
  65.                                 int t = tk.getTicket();//获取票数
  66.                                 if(t>0)//判断是否还有票。
  67.                                 {   
  68.                                         System.out.println(name+": 第"+(t--)+"张票已卖出");
  69.                                         tk.setTicket(t);// 设置余票信息。
  70.                                 }
  71.                                 else
  72.                                 {
  73.                                         System.out.println(name+": 票已售完");//票数为0.
  74.                                         break;// 退出循环。
  75.                                        
  76.                                 }
  77.                         }
  78.                        
  79.                 }
  80.                
  81.                
  82.         }



  83. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
多看看毕老师的视频。
回复 使用道具 举报
我在基础班,马上也要学到多线程啦,这一部分很重要,看来要下一番功夫
回复 使用道具 举报
楼主加油哦。。
回复 使用道具 举报
多线程确实很难得
回复 使用道具 举报
强烈建议再看毕老师的视频,一次不行再看一次。、
加油
回复 使用道具 举报
多次反复的看视频,再多敲几遍代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马