线程池中的线程执行顺序与提交任务的方式有关。线程池中的线程执行任务时,有两种方式:先进先出(`FIFO`)和优先级队列(`Priority`)。线程执行任务的过程如下:
1. 当有新任务添加到线程池中时,如果当前线程数小于核心线程数,则会创建新的线程并立即执行该任务。
2. 如果当前线程数等于核心线程数,新任务被加入到工作队列中,排在先前添加的任务之后。如果队列已满,则创建新的线程来执行该任务。
3. 工作队列中的任务是按照先进先出的顺序执行的。当队列中没有任务时,线程会阻塞,直到新任务加入为止。
4. 如果线程池中的线程数超过了核心线程数,那么当线程处于空闲状态时,它将等待一段时间(keepAliveTime),如果在这段时间内没有新任务需要执行,那么该线程就会被终止,以便回收资源。
5. 线程池的优先级队列,与普通队列的区别在于可以设置任务的优先级。当线程池中有多个任务时,会按照优先级执行。任务的优先级由用户自定义,可以通过实现`Comparable`或`Comparator`接口并覆写`compareTo`或`compare`方法来实现。优先级队列中的任务是按照优先级从高到低依次执行的。
综上所述,线程池中的线程调用顺序取决于任务提交的方式和是否使用优先级队列。一般来说,线程池中的任务执行顺序是先进先出的。如果使用优先级队列,则会按照优先级从高到低的顺序执行任务。