黑马程序员技术交流社区

标题: 多线程好难啊 [打印本页]

作者: 奔来的黑马    时间: 2015-1-6 21:37
标题: 多线程好难啊
多线程中,多消费者,多生产者好麻烦啊 。。 求师兄师姐给发几个有代表性的代码。。  
作者: 银离子    时间: 2015-1-6 21:47
售票的代码,参考下吧。
  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. }
复制代码

作者: 西西小枫    时间: 2015-1-6 22:43
多看看毕老师的视频。
作者: 任我行_2014    时间: 2015-1-6 23:19
我在基础班,马上也要学到多线程啦,这一部分很重要,看来要下一番功夫
作者: liuhuan    时间: 2015-1-7 08:51
楼主加油哦。。
作者: 446111220    时间: 2015-1-7 09:20
多线程确实很难得
作者: Joseph_liuxh    时间: 2015-1-7 10:39
强烈建议再看毕老师的视频,一次不行再看一次。、
加油
作者: bin393973282    时间: 2015-1-7 10:55
多次反复的看视频,再多敲几遍代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2