记录 ThreadPoolExecutor的一些细节

任务队列放入任务的执行方法

众所周知,ThreadPoolExecutor内部任务队列属性类型定义为:private final BlockingQueue workQueue; 而其有三种提交任务方式:add、put和offer,好奇其内部用的哪个,又不想查资料,故而跳到源码内部一看。结果如下:

三种提交任务方式:

  • put(E element):将指定元素插入队列,如果队列已满,则阻塞当前线程,直到有空间可用。
  • add(E element):将指定元素插入队列,如果队列已满,则抛出异常。
  • offer(E element):将指定元素插入队列,如果队列已满,则返回 false。

execute方法和beforeExecute方法的执行顺序

若只看方法名,或许会以为beforeExecute会在execute方法执行前执行,事实并非如此,实际上,execute 方法是线程池对外提供的主要方法,用于提交任务到线程池中执行,而beforeExecute 方法则是在任务真正被执行之前由线程池调用的回调方法。
beforeExecute调用的位置:

posted @ 2024-09-06 15:19  li-羡鱼  阅读(6)  评论(0编辑  收藏  举报