这次主要有一个这样的疑问finalvoidrunWorker(Workerw){Threadwt=Thread.currentThread();可运行任务=w.firstTask;w.firstTask=null;w.解锁();//允许中断booleancompletedAbruptly=true;try{while(task!=null||(task=getTask())!=null){w.lock();//如果池正在停止,确保线程被中断;//如果不是,确保线程没有被中断。这//在第二种情况下需要重新检查以处理//shutdownNow竞争,同时清除中断if((runStateAtLeast(ctl.get(),STOP)||(Thread.interrupted()&&runStateAtLeast(ctl.get(),STOP)))&&!wt.isInterrupted())wt.interrupt();尝试{beforeExecute(wt,task);Throwable抛出=null;尝试{task.run();}赶上(RuntimeExce选项x){抛出=x;扔x;}赶上(错误x){抛出=x;扔x;}catch(Throwablex){抛出=x;抛出新错误(x);}最后{afterExecute(任务,抛出);}}最后{task=null;w.completedTasks++;w.解锁();}}completedAbruptly=false;}finally{processWorkerExit(w,completedAbruptly);并不是线程池提交任务后,任务自己又启动了一个线程,所以用代码来验证publicclassThreadPool{privatestaticExecutorServicepool;publicstaticvoidmain(String[]args){//maximumPoolSize设置为2,拒绝策略对于AbortPolic策略,直接抛出异常pool=newThreadPoolExecutor(2,10,1000,TimeUnit.MILLISECONDS,newSynchronousQueue
