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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张亭 中级黑马   /  2012-5-29 15:20  /  1219 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有两个关于线程池的问题:
1,用Executors.newSingleThreadExecutor()创建的线程池的execute()方法 和 用Thread的start()方法有什么不同么?
2,  交通系统的教程里,有这样的代码,
  ExecutorService pool = Executors.newSingleThreadExecutor();
  pool.execute(new Runnable() {
   @Override
   public void run() {
    System.out.println(Thread.currentThread().getName());//我加上这句查看线程名字
    for (int i = 1; i < 1000; i++) {
     try {
      Thread.sleep((new Random().nextInt(10) + 1) * 1000);
      transportation.add(Road.this.name + "--" + i);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   }
  });
结果是:
pool-1-thread-1
pool-3-thread-1
pool-5-thread-1
pool-7-thread-1
pool-9-thread-1
pool-11-thread-1
pool-13-thread-1
pool-15-thread-1
pool-17-thread-1
pool-19-thread-1
pool-21-thread-1
pool-23-thread-1

换成Thread,
new Thread(new Runnable() {
   @Override
   public void run() {
    System.out.println(Thread.currentThread().getName());
    for (int i = 1; i < 1000; i++) {
     try {
      // Thread.sleep((long) (Math.random()*10));
      Thread.sleep((new Random().nextInt(10) + 1) * 1000);
      transportation.add(Road.this.name + "--" + i);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   }
  }).start();
结果是:
Thread-0
Thread-1
Thread-2
Thread-3
Thread-4
Thread-5
Thread-6
Thread-8
Thread-9
Thread-10
Thread-11

问题:为什么线程池的名字是1,3,5这样的跳呢?而且没看到Thread-0,是为什么

点评

线程的唤醒是需要其他线程来唤醒的,我猜是成对的,另外的线程用来唤醒你的使用线程,有点像IO流中的阻塞机制,线程成对出现  发表于 2012-5-30 12:24

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马