当前位置: 首页 > 后端技术 > Node.js

threadPoolExecutor

时间:2023-04-04 00:59:25 Node.js

1。线程池ThreadPoolExecutor的使用,队列的使用:SynchronousQueuenotholdtask,handofftasktothread,所以当没有线程处理任务时会false,或者创建新的线程处理任务,一般,会设置最大线程无边界一起使用,LinkedBlockingQueue,Unboudedqueue,maxmumpoolSize没有作用,例如在网页中用于平滑瞬态突发请求。ArrayBlockingQueue,boudedqueue.2,如何判断线程是否空闲?当线程在getTask的时候,判断核心线程是否可以超时或者线程数是否大于核心线程。如果上一步为真,说明可能需要淘汰线程,然后拿到超时参数area的任务。如果超时后仍未获取到任务,则可以判断线程空闲,需要减少工作线程数,停止线程。3、submit和execute分别使用了哪个方法来执行任务。都可以,submitreturnfuture,可以得到一个reslut.execute才执行。4、线程池工作线程工作原理:先执行(runnable),添加第一个任务,此时线程数小于核心线程数,建立一个workerThread,worker本身是runnable,成员变量包含一个firstTask和一个thread(this),构造完成后,调用worker.thread.start(),worker.run会执行,执行过程中会判断firstTask,如果存在则执行firstTask,否则判断getTask中是否有任务,getTask会再次调用阻塞队列,有任务时执行从队列中取出的任务。下面说一下核心线程满的时候的处理过程,它会将任务放入阻塞队列,因为之前执行完firstTask任务后的线程会调用getTask,所以会得到后面加入的任务。所以线程可以被重用继续执行。