Maison  >  Article  >  Java  >  Comment résoudre l'exception rejetée par l'invocation de la méthode Java (MethodInvocationRejectedException)

Comment résoudre l'exception rejetée par l'invocation de la méthode Java (MethodInvocationRejectedException)

PHPz
PHPzoriginal
2023-08-20 17:53:091229parcourir

Comment résoudre lexception rejetée par linvocation de la méthode Java (MethodInvocationRejectedException)

Comment résoudre l'exception rejetée par l'invocation de la méthode Java (MethodInvocationRejectedException)
Dans le processus d'utilisation du développement Java, nous rencontrons souvent diverses situations anormales. Parmi elles, l'exception rejetée par l'invocation de la méthode Java (MethodInvocationRejectedException) est une exception courante. Cet article présentera ce qu'est l'exception MethodInvocationRejectedException et fournira des méthodes et des exemples de code pour résoudre l'exception.

Qu'est-ce que MethodInvocationRejectedException ?
MethodInvocationRejectedException est une exception dans le framework Spring. Cela se produit généralement lorsqu'un appel de méthode est rejeté. Lorsque nous utilisons le pool de threads du framework Spring ou des tâches asynchrones, si le pool de threads ou la file d'attente des tâches est plein, les nouveaux appels de méthode seront rejetés et une exception MethodInvocationRejectedException sera levée.

Méthodes pour résoudre l'exception MethodInvocationRejectedException :

  1. Augmenter la capacité du pool de threads ou de la file d'attente des tâches : Tout d'abord, nous pouvons résoudre l'exception MethodInvocationRejectedException en augmentant la capacité du pool de threads ou de la file d'attente des tâches. Cela peut améliorer les capacités de traitement simultané du système et éviter le rejet de tâches. Par exemple, nous pouvons augmenter le nombre maximum de threads dans le pool de threads ou la taille de la file d'attente des tâches.
  2. Utilisez une stratégie de rejet appropriée : Deuxièmement, nous pouvons résoudre l'exception MethodInvocationRejectedException en définissant une stratégie de rejet appropriée. Le framework Spring propose une variété de politiques de rejet parmi lesquelles choisir, telles que l'utilisation de la politique AbortPolicy (la politique par défaut lèvera une exception de rejet), l'utilisation de la politique CallerRunsPolicy (le thread appelant exécute la tâche rejetée) et l'utilisation de la politique DiscardPolicy ( rejetant directement la tâche rejetée), etc. Nous pouvons choisir une stratégie de rejet appropriée en fonction des besoins réels.

Ce qui suit est un exemple de code utilisant le pool de threads pour montrer comment définir une politique de rejet appropriée pour gérer l'exception MethodInvocationRejectedException :

import java.util.concurrent.*;

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 创建线程池
        ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>(1));

        // 设置拒绝策略为CallerRunsPolicy
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

        // 提交任务
        for (int i = 0; i < 3; i++) {
            final int taskId = i;
            executor.submit(() -> {
                System.out.println("Task " + taskId + " is running on thread " + Thread.currentThread().getName());
                // 模拟任务执行时间
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }

        // 关闭线程池
        executor.shutdown();
    }
}

Dans le code ci-dessus, nous créons un exécuteur de pool de threads et définissons le nombre maximum de threads à 1. , tâche La taille de la file d'attente est de 1. Lorsque le nombre de tâches soumises dépasse 1, le pool de threads utilisera la stratégie CallerRunsPolicy pour exécuter les tâches rejetées, c'est-à-dire que les tâches seront transmises au thread appelant pour exécution.

Grâce aux méthodes ci-dessus, nous pouvons résoudre l'exception MethodInvocationRejectedException et améliorer les capacités de traitement simultané du système. Cependant, il convient de noter qu'un trop grand nombre de threads et des files d'attente de tâches trop volumineuses peuvent entraîner une consommation excessive de ressources système. Par conséquent, lors de la définition des paramètres du pool de threads, vous devez les ajuster en fonction de la situation réelle.

Résumé : 
L'exception rejetée par l'invocation de la méthode Java (MethodInvocationRejectedException) est une exception courante dans le framework Spring, qui se produit généralement lorsque le pool de threads ou la file d'attente des tâches est plein. Pour résoudre cette exception, nous pouvons augmenter la capacité du pool de threads ou de la file d'attente des tâches, ou utiliser une politique de rejet appropriée. En utilisation réelle, il doit être ajusté en fonction des exigences du système et éviter une utilisation excessive des ressources.

Nous espérons que les méthodes et les exemples de code fournis dans cet article pourront aider les lecteurs à résoudre les exceptions MethodInvocationRejectedException et à mieux utiliser les pools de threads et les tâches asynchrones pour améliorer les performances du système pendant le processus de développement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn