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

© 请备注 中级黑马   /  2014-4-5 18:47  /  1049 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Road
{
    private List<String> vechicles = new ArrayList<String>();
    // 这里为什么是用List而不是其它集合,后面怎么又变成ArrayList了?这样有什么 好处吗?
    private String name = null;
    public Road(String name)
    {
        this.name = name;
       
        ExceutorServer pool = Executors.newSingleThreadExecutor();
        pool.execute(new Runnable()//这里线程的创建既不是实现实现Runnable,也不是继承Thread,这            
                                                  // 是新的创建方式吗?用继承和实现不能解决问题吗?
        {
            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);
                }
            }
        });

2 个回复

倒序浏览
关于list集合的疑问,这里主要是多态+泛型,因为ArrayList是List的子类,所以可以用父类引用指向子类对象,这其实也是多态的本质。当然这里你也可以写作:ArrayList<String> vechicle = new ArrayList<String>();  都行的。我认为这里使用LinkedList集合会更好,因为程序中只涉及到了增删操作,使用LinkedList集合会更加高效。

至于后边的线程创建问题,程序中这种线程创建方法是应用了新技术而已。用咱们学过的继承Thread类或者实现Runnable接口的方法都行的。
回复 使用道具 举报
问题一:
private List<String> vechicles = new ArrayList<String>();
// 这里为什么是用List而不是其它集合,后面怎么又变成ArrayList了?这样有什么 好处吗?
使用什么集合要看需求,       
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
        |--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
        |--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
        |--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。
Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,迭代器。
        |--HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;
    |--LinkedHashSet:有序,hashset的子类。
        |--TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。
问题二:
       pool.execute(new Runnable()//这里线程的创建既不是实现实现Runnable,也不是继承Thread,这            
                                                  // 是新的创建方式吗?用继承和实现不能解决问题吗?
这是新技术中提供的线程池的概念,方便了程序的书写,提高了效率,其实内部还是实现的Runnable()接口。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马