假设创建了15个core size的固定大小线程池。
ThreadPoolExecutor discoveryPool = (ThreadPoolExecutor) Executors
 .newFixedThreadPool(15);发现,在跑的过程中,run线程因为异常报错, 结果 core size线程数也降了下来。不再是15个core size了。
请教这种情况应该如何避免?

解决方案 »

  1.   

    试验了一下,10个线程,5个抛出异常
    最后用discoveryPool.getCorePoolSize()得到的值还是10
      

  2.   

    抛运行时异常。 core size 给15 。 循环给100个线程执行。 每次都抛运行时异常,你看看main 方法是不是结束了。正常的话,应该是 不会结束的。
      

  3.   

    看来应该是   worker在run()过程中,因为runTask(task)抛出运行时异常,结果 直接跳到执行finally{},当前workerDone()了。导致coresize减少。
    暂时只想到如果为了保证coresize不会因为异常而减少,从而保证并发数足够用,只好在 ThreadPoolExecutor.execute(Runnable command) 传的Runnable 的run方法,整个用 try{}catch()包裹了。
      

  4.   


    不管有没有异常,main 方法一直都没结束,除非调用discoveryPool.shutdown()不管有没有异常,我这里貌似coresize没减少,即使异常了,后边会继续创建,再执行。
      

  5.   

    ThreadPoolExecutor discoveryPool = (ThreadPoolExecutor) Executors
    .newFixedThreadPool(15);
    for (int i = 0; i < 100; i++) {
    discoveryPool.execute(new Thread() {
    @Override
    public void run() {
    int j = 0;
    System.out.println(1 / j);// 抛runtimeexception }
    });
    }你试试这段测试代码。
      

  6.   

    谢谢各位。暂时我还是try catch 来避免core size减小的情况。保证并发数。