黑马程序员技术交流社区

标题: 请教关于交通灯的一个问题 [打印本页]

作者: yuchunfeng1221    时间: 2013-10-15 00:33
标题: 请教关于交通灯的一个问题
本帖最后由 yuchunfeng1221 于 2013-10-16 15:30 编辑

交通灯面试题中第一个就是异步随机生成按照各个路线行驶的车辆
我想问问这个异步体现在哪里呢?
  1. public class Road {
  2.         private List<String> vechicles = new ArrayList<String>();
  3.         
  4.         private String name =null;
  5.         public Road(String name){
  6.                 this.name = name;
  7.                
  8.                 //模拟车辆不断随机上路的过程               
  9.                 ExecutorService pool = Executors.newSingleThreadExecutor();
  10.                 pool.execute(new Runnable(){
  11.                         public void run(){
  12.                                 for(int i=1;i<1000;i++){
  13.                                         try {
  14.                                                 Thread.sleep((new Random().nextInt(10) + 1) * 1000);
  15.                                         } catch (InterruptedException e) {
  16.                                                 e.printStackTrace();
  17.                                         }
  18.                                         vechicles.add(Road.this.name + "_" + i);
  19.                                 }                                
  20.                         }
  21.                         
  22.                 });
  23.                
  24.                 //每隔一秒检查对应的灯是否为绿,是则放行一辆车               
  25.                 ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);
  26.                 timer.scheduleAtFixedRate(
  27.                                 new Runnable(){
  28.                                         public void run(){
  29.                                                 if(vechicles.size()>0){
  30.                                                         boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
  31.                                                         if(lighted){
  32.                                                                 System.out.println(vechicles.remove(0) + " is traversing !");
  33.                                                         }
  34.                                                 }
  35.                                                 
  36.                                         }
  37.                                 },
  38.                                 1,
  39.                                 1,
  40.                                 TimeUnit.SECONDS);
  41.                
  42.         }
  43. }
复制代码

作者: 雷丹    时间: 2013-10-15 11:50
同步:发送一个请求,等待返回,然后再发送下一个请求
异步:发送一个请求,不等待返回,随时可以再发送下一个请求
不停地产生随机数,只是产生一个信号sleep一下,并没有做对返回信号的处理。




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