黑马程序员技术交流社区

标题: 打印 上一主题 下一主题 张孝祥老师_交通灯--关于final 和反射 [打印本页]

作者: せR3n、何必装纯    时间: 2011-11-14 22:24
标题: 打印 上一主题 下一主题 张孝祥老师_交通灯--关于final 和反射
[code=java]package com.isoftstone.interview.traffic;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
* 每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road实例对象。
* 每条路线上随机增加新的车辆,增加到一个集合中保存。
* 每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。
* @author 张孝祥 www.it315.org
*
*/
public class Road {
        private List<String> vechicles = new ArrayList<String>();
      
        private String name =null;
        public Road(String name){
                this.name = name;
               
                //模拟车辆不断随机上路的过程               
                ExecutorService pool = Executors.newSingleThreadExecutor();
                pool.execute(new Runnable(){
                        public void run(){
                                for(int i=1;i<1000;i++){
                                        try {
                                                Thread.sleep((new Random().nextInt(10) + 1) * 1000);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                        vechicles.add(Road.this.name + "_" + i);
                                }                              
                        }
                       
                });
               
                //每隔一秒检查对应的灯是否为绿,是则放行一辆车               
                ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);
                timer.scheduleAtFixedRate(
                                new Runnable(){
                                        public void run(){
                                                if(vechicles.size()>0){
                                                        boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
                                                        if(lighted){
                                                                System.out.println(vechicles.remove(0) + " is traversing !");
                                                        }
                                                }
                                               
                                        }
                                },
                                1,
                                1,
                                TimeUnit.SECONDS);
               
        }
}[/code]这里面的这里的用法我不太清楚:[code=java]boolean lighted = Lamp.valueOf(Road.this.name).isLighted();[/code]这里对name的操作Road.this.name和这里直接 写name而这里修改为[code=java]public Road(final String name){[/code]效果一样,怎么解释,这两种方法的分别的含义是什么??




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