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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马斯巴达 高级黑马   /  2013-3-7 17:50  /  1131 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢军 于 2013-3-9 16:07 编辑

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;

public class Road {

private List<String> car=new ArrayList<String>();//张老师说用前面用list而不用ArrayList的原因是要面向接口编程,
                                                                            // 在交通灯里有具体体现吗?还是只是预留接口为了以后的维护之便
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();
                                }
                                 car.add(Road.this.name+" "+i);
                                 
                         }
                }
        });
         ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
        timer.scheduleAtFixedRate(new Runnable(){
                public void run(){
                        if(car.size()>0){
                                boolean lighted=Lamp.valueOf(Road.this.name).isLighted();
                                if(lighted){
                                
                                        System.out.println(car.remove(0)+"is traversing !");
                                       
                                }
                        }
                        
                }
        },
                        1,
                        1,
                        TimeUnit.SECONDS);
         

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

1 个回复

倒序浏览
List只是集合最大的父类,实现List接口的不只是ArrayList,还有其他容器类
List<String> car=new ArrayList<String>();
编译时类型是List,运行时类型是ArrayList,实现多态性
而List接口的实现类不只有ArrayList一个,用一个List类型的引用这是“面向接口编程”,好处有很多,
以后我们在工作的时候很多不是我们写的类,而是第三方类库
我们面向接口编程,不需要了解是什么实现类,我们都把它们当List接收过来就好了,
我们就当成List来用。提高程序的扩展性,和降低耦和度

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

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