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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yuchunfeng1221 中级黑马   /  2013-10-15 00:33  /  1224 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

1 个回复

倒序浏览

回帖奖励 +5

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

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马