本帖最后由 孙百鑫 于 2013-6-19 09:06 编辑
- public class Road {
- //每个Road对象都有一个name成员变量来代表方向,有一个vehicles成员变量来代表方向上的车辆集合
- private List<String> vehicles = new ArrayList<String>();
- private String name = null;
- public Road(String name){
- this.name = name;
- //jdk1.5的线程库Executors
- ExecutorService pool = Executors.newSingleThreadExecutor();
- //在Road对象的构造方法中启动一个线程每隔一个随机的时间向vehicles集合中增加一辆车
- //Runalbe是接口不能直接new,所以这里new了个接口实现类的对象
- pool.execute(new Runnable(){
- public void run() {
- for(int i= 1;i<1000;i++){
- try {
- //产生1-10之间的随机整数
- Thread.sleep((new Random().nextInt(10)+1)*1000);
- System.out.println(Road.this.name+"线程到底是个什么东西");
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- //内部类想要访问外部类的局部变量,外部类的局部变量要加上final修饰
- //这里也可以访问外部类的成员变量来实现
- //访问外部类的成员变量本来可以直接写外部类的成员变量名,
- //但是如果这个变量与自己类里的变量名冲突了,要加上类名.this.变量名
- vehicles.add(Road.this.name + "_" + i);
- System.out.println("牌照为"+Road.this.name + "_" + i + "的车来了");
- }
- }
- });
- //在Road对象的构造方法中启动一个定时器,每隔一秒检查该方向上的灯是否为绿,是则将集合中的第一辆车移除掉
- ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
- timer.scheduleAtFixedRate(
- new Runnable(){
- public void run() {
- if(vehicles.size() > 0){
- boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
- //布尔型的变量直接用,不用和true去比较了lighted==true
- if(lighted){
- System.out.println(vehicles.remove(0)+"开走了!");
- }
- }
- }
- },
- 1,
- 1,
- TimeUnit.SECONDS);
- }
- }
复制代码 在这个Road类里,有两个线程,第一个线程是用来随机向路上增加车辆的,
第二个线程是一个定时器,判断是否为绿灯,隔一秒就开走一辆车。
有一点不明白,在定时器中,
System.out.println(vehicles.remove(0)+"开走了!");在这一句中,程序是怎么知道要删除的是哪个方向的第一辆车呢?
希望高手帮忙来解释一下~
|