步骤3: 获取并打印线程池信息 在我们提交任务并让线程池处理之后,我们可以获得线程池的信息,如当前线程池的大小,活动线程数等。 importjava.util.concurrent.ThreadPoolExecutor;// 打印当前线程池的大小ThreadPoolExecutorthreadPoolExecutor=(ThreadPoolExecutor)executor;System.out.println("Current Pool Size: "+thread...
②线程1开始执行,将num=2,并唤醒线程2,此时线程1和线程2竞争锁,如果线程1抢到锁,会进入等待,并释放锁,此时只有线程2可以拿锁 ③线程2开始执行,将num=3,并唤醒线程3,此时线程2和线程3竞争锁,如果线程2抢到锁,会进入等待,并释放锁,此时只有线程3可以拿锁 ④线程3开始执行,将num=1,并唤醒线程1,此时线程3和...
1、一种最简单的办法就是,将threadPoolExecutor.submit(new DivTask(100,i));改为threadPoolExecutor.execute(new DivTask(100,i)); 或者对submit()方法进行改造。这两种方法都可以得到部分堆栈信息,请看执行结果: 但是,这种方式打印的堆栈信息很有限。如果想知道这个出现异常的任务是哪里提交的?而任务的具体提交...
这是线程池内执行的run方法,在finally中执行了afterExecute(task, thrown)方法: finalvoidrunWorker(Workerw){Threadwt=Thread.currentThread();Runnabletask=w.firstTask;w.firstTask=null;w.unlock();// allow interruptsboolean completedAbruptly=true;try{while(task!=null||(task=getTask())!=null){w.lock()...
线程池内部捕获并处理了异常,没有向外抛出。 任务中的异常被吞噬,没有被正确处理。 异常信息被重定向到其他地方,导致我们无法看到。 解决方法 要解决线程池不打印异常信息的问题,我们可以采取以下几种方法: 在任务的run方法中捕获异常并进行处理,可以通过try-catch块将异常捕获并打印出来,以便及时发现问题。