Interviewer : Quelles sont les méthodes de construction et les stratégies de rejet du pool de threads ?

En Java, le pool de threads est un outil puissant de gestion des threads pour améliorer les performances et réduire la consommation de ressources. Cet article présentera la méthode de construction du pool de threads, le type de pool de threads et la stratégie de rejet du pool de threads.

Comment créer un pool de threads

Java Le pool de threads dans est principalement construit via java.util.concurrent.ExecutorServicedes interfaces et leurs classes d'implémentation . ThreadPoolExecutorVoici quelques méthodes de construction courantes :

  1. Utiliser Executorsles méthodes de fabrique de classe : Executorsla classe fournit une série de méthodes de fabrique statiques pour créer des pools de threads, telles que newFixedThreadPool, newCachedThreadPoolet newSingleThreadExecutor.

  2. Créer ThreadPoolExecutorune instance directement : vous pouvez directement instancier ThreadPoolExecutorune classe et transmettre une série de paramètres pour créer un pool de threads, tels que le nombre de threads principaux, le nombre maximal de threads, le temps de survie des threads inactifs, les unités de temps, les files d'attente de tâches. , etc.

Types de pools de threads

Java Le pool de threads dans peut être divisé selon les types suivants :

  1. Pool de threads fixes ( FixedThreadPool) : le pool de threads fixes a un nombre fixe de threads principaux et le nombre maximal de threads est identique au nombre de threads principaux. Ce pool de threads est adapté pour gérer un nombre fixe de tâches simultanées.

  2. Pool de threads pouvant être mis en cache ( CachedThreadPool) : le nombre de threads principaux dans le pool de threads pouvant être mis en cache est 0 et le nombre maximal de threads est Integer.MAX_VALUE. Lorsqu'une nouvelle tâche arrive, s'il y a un thread inactif, il sera réutilisé, sinon, un nouveau thread sera créé. Les threads inactifs sont recyclés après un certain temps. Ce pool de threads convient aux scénarios dans lesquels un grand nombre de tâches à court terme sont effectuées.

  3. Exécuteur monothread ( SingleThreadExecutor) : un exécuteur monothread n'a qu'un seul thread principal et le nombre maximal de threads est également de 1. Les tâches seront exécutées de manière séquentielle, ce qui convient aux scénarios nécessitant une exécution en série des tâches.

  4. Pool de threads de synchronisation ( ScheduledThreadPool) : le pool de threads de synchronisation permet de chronométrer ou d'exécuter périodiquement des tâches. Il hérite de ThreadPoolExecutoret implémente ScheduledExecutorServicel'interface.

La politique de rejet du pool de threads

线程池的拒绝策略当线程池中的线程达到最大线程数且任务队列已满时,线程池会采用拒绝策略来处理新到来的任务。Java 中的有以下几种:

  1. AbortPolicy(默认拒绝策略):直接抛出RejectedExecutionException异常,表示任务无法处理。

  2. CallerRunsPolicy:调用任务的提交者所在的线程来执行任务。这种策略可以降低新任务提交的速度,从而为线程池腾出时间处理已提交的任务。

  3. DiscardPolicy:该策略直接丢弃新到来的任务,不抛出异常。如果你可以容忍某些任务不被执行,这种策略可能会很有用。

  4. DiscardOldestPolicy:该策略会丢弃任务队列中等待时间最长的任务,然后尝试提交新任务。这种策略在任务队列可能存在低优先级任务时较为实用。

  5. 自定义拒绝策略:你还可以实现RejectedExecutionHandler接口来自定义拒绝策略。例如,可以记录被拒绝的任务,以便稍后分析和处理。

总结

线程池在 Java 中是一个强大的工具,可以帮助我们管理和控制线程的执行。了解不同类型的线程池及其适用场景以及拒绝策略可以帮助我们更有效地使用线程池。在实际应用中,我们应根据需求选择合适的线程池类型和拒绝策略,以实现高效、稳定的并发执行。

Je suppose que tu aimes

Origine juejin.im/post/7215424831209635901
conseillé
Classement