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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陌路行者 中级黑马   /  2013-7-23 19:53  /  744 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-28 22:50 编辑
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Random;
  4. import java.util.concurrent.Executors;
  5. import java.util.concurrent.ScheduledExecutorService;
  6. import java.util.concurrent.TimeUnit;


  7. public class Road {
  8.         private List<String> vechicles = new ArrayList<String>();
  9.         private String name;
  10.         Road(String name){
  11.                 this.name = name;
  12.                 ScheduledExecutorService pool = Executors.newScheduledThreadPool(1);
  13.                 pool.execute(new Runnable(){
  14.                         public void run(){
  15.                                 for(int i=1;i<1000;i++){
  16.                                         try {
  17.                                                 Thread.sleep((new Random().nextInt(10)+1)*1000);
  18.                                         } catch (InterruptedException e) {
  19.                                                 
  20.                                                 e.printStackTrace();
  21.                                         }
  22.                                         vechicles.add(Road.this.name+"_"+i);
  23.                                 }
  24.                         }
  25.                 });
  26.                 ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
  27.                 timer.scheduleAtFixedRate(
  28.                                 new Runnable(){
  29.                                         public void run(){
  30.                                                 Lamp currentLamp = Lamp.valueOf(Road.this.name);
  31.                                                 if(currentLamp.isLighted()){
  32.                                                         System.out.println(vechicles.remove(0)+" is traversing.....!");
  33.                                                 }
  34.                                         }
  35.                                 },
  36.                                 1,
  37.                                 1,
  38.                                 TimeUnit.SECONDS
  39.                                 );

  40.         }
  41. }
复制代码

  1. public enum Lamp {
  2.         S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
  3.         N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),
  4.         S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);
  5.         
  6.         private Lamp(String opposite,String next,boolean lighted){
  7.                 this.opposite = opposite;
  8.                 this.next = next;
  9.                 this.lighted = lighted;
  10.         }
  11.         private boolean lighted;
  12.         private String opposite;
  13.         private String next;
  14.         public boolean isLighted(){
  15.                 return lighted;
  16.                
  17.         }
  18.         public void light(){
  19.                 this.lighted = true;
  20.                 if(opposite!=null)
  21.                         Lamp.valueOf(opposite).light();
  22.                 System.out.println(name()+" lamp is green 一共有6个方向能看到汽车通过");

  23.         }
  24.         public Lamp balckOut(){
  25.                 this.lighted = false;
  26.                 if(opposite!=null){
  27.                         Lamp.valueOf(opposite).balckOut();
  28.                 }
  29.                
  30.                 Lamp nextLamp = null;
  31.                
  32.                 if(next!=null){
  33.                         nextLamp = Lamp.valueOf(next);
  34.                         System.out.println("绿灯从"+name()+" 切换为------>"+next);
  35.                         nextLamp.light();
  36.                 }
  37.                 return nextLamp;
  38.         }
  39.         
  40. }
复制代码
  1. import java.util.concurrent.Executors;
  2. import java.util.concurrent.ScheduledExecutorService;
  3. import java.util.concurrent.TimeUnit;


  4. public class LampController {
  5.         private Lamp currentLamp;
  6.         
  7.         public LampController(){
  8.                 currentLamp = currentLamp.S2N;
  9.                 currentLamp.light();
  10.                
  11.                 ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
  12.                 timer.scheduleAtFixedRate(
  13.                                 new Runnable(){
  14.                                         public void run(){
  15.                                                 currentLamp = currentLamp.balckOut();
  16.                                         }
  17.                                 },
  18.                                 10,
  19.                                 10,
  20.                                 TimeUnit.SECONDS
  21.                                 );
  22.         }
  23. }
复制代码

  1. public class MainClass {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 String[] directions = {"S2N","S2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};
  7.                 for(int i=0;i<directions.length;i++){
  8.                         new Road(directions[i]);
  9.                 }
  10.                 new LampController();
  11.         }

  12. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

1 个回复

倒序浏览
多添加注释;在road()中添加System.out.print("!")输出语句看哪句没有执行到;

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

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