黑马程序员技术交流社区

标题: 分享一道点招题 [附答案] [打印本页]

作者: L1ub0w3n    时间: 2016-6-17 23:06
标题: 分享一道点招题 [附答案]
/*
* 有一辆班车除司机外只能承载70个人,假设前后两个车门都能上车,如果坐满则不能再上车。
* 请用线程模拟上车过程并且在控制台打印出是从哪个车门上车以及剩下的座位数。(10分)
* 比如:(从前门上车---还剩N个座位)
*/
作者: L1ub0w3n    时间: 2016-6-17 23:07
  1. public class Ticket implements Runnable{
  2.        
  3.         //定义车上总共的座位数量
  4.         int x = 70;
  5.         Object lock = new Object();
  6.        
  7.         @Override
  8.         public void run() {
  9.                 while (true) {
  10.                         //上锁
  11.                         synchronized (lock) {
  12.                                 if (x>=0) {
  13.                                         System.out.println("从"+Thread.currentThread().getName()+"上车,还有"+(x--)+"个座位。");       
  14.                                         }
  15.                                 }
  16.                         }
  17.                 }
  18.         }       

  19. public class Test02 {
  20.         public static void main(String[] args) {
  21.                 // 创建票对象
  22.                 Ticket t = new Ticket();
  23.                
  24.                 //实例化上车的两个门[双线程]
  25.                 Thread t1 = new Thread(t,"前门");
  26.                 Thread t2 = new Thread(t,"后门");
  27.                
  28.                 //开启线程
  29.                 t1.start();
  30.                 t2.start();
  31.         }
  32. }
复制代码

作者: OmbreAmant丶C    时间: 2016-6-17 23:43
liuliuliu  你这么6 咋不飞呢
作者: 孟小垚    时间: 2016-6-18 08:26
学习,学习,学习!
作者: aizengk    时间: 2016-6-18 10:36
楼主好人
作者: jiazhuoxiao    时间: 2016-6-18 10:52
赞一个  受教了
作者: 戎马生涯    时间: 2016-6-18 16:40
本帖最后由 戎马生涯 于 2016-6-18 16:46 编辑

public class Test{        
               public static void main(String[] args) {                 
                                     Car car = new Car();               
                                     new Thread(car,"前门").start();                 
                                     new Thread(car,"后门").start();        
                   }
}
class Car implements Runnable {         
                private int seats = 70;        
                         @Override        
                          public void run() {               
                                      while(true) {                        
                                                   synchronized (this) {                              
                                                        if(seats<=0)                                       
                                                                        break;                                 
                                                     try {                                       
                                                               Thread.sleep(10);                              
                                                    } catch (InterruptedException e) {                                       
                                                                    e.printStackTrace();                                
                                                                 }                                
                                                                   System.out.println(Thread.currentThread().getName()+"上车---还剩"+(--seats)+"个座...");                     
                                                        }               
                                             }        
                       }      
  }

作者: 青春飞扬丶    时间: 2016-7-14 16:41
好人好人,大好人
作者: 地狱蓝枫    时间: 2016-7-14 20:59
还没写多线程,看得好晕{:2_41:}
作者: StupidPz    时间: 2016-7-14 21:16
学习学习
作者: 陈建    时间: 2016-7-14 21:17
这要是机考那还好,要是手写代码那可就!!!
作者: anyeyyc    时间: 2016-7-14 21:24
学习学习         
作者: 一叶知秋来    时间: 2016-7-14 21:43
666666666虽然还没学线程,但是看着也很66
作者: 呆呆的小呆    时间: 2016-7-14 21:44
赞赞赞赞赞
作者: object_dk    时间: 2016-7-14 21:49
没学到多线程,还不懂
作者: qetu001212    时间: 2016-7-14 21:55
这么好的例子需要分享,让更多人学习!
作者: q123123    时间: 2016-7-14 23:10
还有注释,真是答案....




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