iteye_19622 2009-02-14 11:20
浏览 244
已采纳

线程池怎么做到线程重用?

我很早就知道线程池这个概念,但是一直没有机会使用到,我对线程池的一个比较深刻的认识就是线程池中的线程是个数限制的,一次性构造全部但是是可以重用的,不需要每次都去构造一个新的。但是最近我做项目的做到了相关的技术,发现好像并不是这么一回事。。。

 

 

public class MyThread implements Runnable{

    public MyThread() {
        System.out.println("construct...");
    }

    
    public static void main(String[] args) {
        ExecutorService service = Executors.newFixedThreadPool(2);
        for(int i = 0; i < 10; i++){
            service.submit(new MyThread());
        }
    }

    public void run() {
        try{
            System.out.println("run...");
            Thread.sleep((long) (Math.random()*1000));
        }catch(Exception e){
            
        }
    }
}

这是我写的一个很简单的测试类,运行后发现构造函数被调用了10次(我觉的如果能重用的话调用两次就够了吧),那我就纳闷了,线程池中的线程真的可以做到重用吗?还是我的写法有问题?还是我的认识从根本上就是错误的?


问题补充:
先感谢aninfeel和lewhwa的热心帮助,现在我比较关心的是使用Executors创建的线程池如何做到线程重用?是不能用new(如:service.submit(new MyThread());)来创建线程吗?
问题补充:
   我可以这样理解吗:service.submit(new MyThread())执行的时候实际上是调用Executors.newFixedThreadPool(2)这步中创建的两个线程,并且这两个线程是可以重用的,然后通过这两个可重用的线程去调用MyThread,从而达到线程重用的目的吗?
  • 写回答

6条回答 默认 最新

  • ocean_end 2009-02-16 14:43
    关注

    [quote]new MyThread 10次,当然构造函数10次。
    Executors.newFixedThreadPool(2); 创建了有2个线程的线程池,这两个线程可复用,并且同时只有两个线程执行,多余2个任务等待被执行。
    [/quote]
    Executors.newFixedThreadPool(2); 是创建一个有2个线程的线程池。
    service.submit(new MyThread()); 是向线程池中添加需要执行的任务,而不是向线程池添加线程

    [quote]
    问题补充:
    先感谢aninfeel和lewhwa的热心帮助,现在我比较关心的是使用Executors创建的线程池如何做到线程重用?是不能用new(如:service.submit(new MyThread());)来创建线程吗?

    [/quote]
    Executors.newFixedThreadPool(2); 创建的2个线程是被重用的。
    service.submit(new MyThread()); 向线程池中添加的任务,线程池是不会负责的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)