Comment résoudre l'exception d'erreur rejetée par l'invocation de méthode Java (MethodInvocationRejectedErrorExceotion)
Introduction :
Dans la programmation Java, lorsque nous utilisons le multithreading ou un pool de threads pour effectuer des appels de méthode, nous pouvons parfois rencontrer des erreurs d'appel de méthode rejetées Exception (MethodInvocationRejectedErrorExceotion ). Cette exception empêche le thread d'exécuter correctement la méthode et peut entraîner l'arrêt du programme. Cet article décrit comment résoudre cette exception et fournit des exemples de code correspondants.
Raison de l'exception :
L'exception d'erreur d'appel de méthode rejetée est généralement causée par des limitations de ressources du pool de threads. Lorsque le nombre de threads dans le pool de threads atteint la limite maximale et qu'une nouvelle demande d'appel de méthode arrive, le pool de threads refusera d'appeler la méthode et lèvera une exception.
Solution :
Voici plusieurs solutions, vous pouvez choisir la solution qui vous convient en fonction de la situation spécifique.
ExecutorService executor = Executors.newFixedThreadPool(10); //创建一个固定大小为10的线程池 ((ThreadPoolExecutor)executor).setMaximumPoolSize(20); //增加最大线程数量为20
ThreadPoolExecutor executor = new ThreadPoolExecutor( 10, //核心线程数量 20, //最大线程数量 60, //线程保持活跃时间 TimeUnit.SECONDS, //活跃时间的单位 new LinkedBlockingQueue<Runnable>(), //任务队列 new ThreadPoolExecutor.CallerRunsPolicy()); //非阻塞策略,将未处理的任务返回给调用方
ThreadPoolExecutor executor = new ThreadPoolExecutor( 10, //核心线程数量 20, //最大线程数量 60, //线程保持活跃时间 TimeUnit.SECONDS, //活跃时间的单位 new ArrayBlockingQueue<Runnable>(100)); //有界任务队列,最大容量为100
ThreadPoolExecutor executor = new ThreadPoolExecutor( 10, //核心线程数量 20, //最大线程数量 60, //线程保持活跃时间 TimeUnit.SECONDS, //活跃时间的单位 new LinkedBlockingQueue<Runnable>(), //任务队列 new RejectedExecutionHandler() { //自定义拒绝策略 @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { //执行自定义的处理逻辑,例如日志记录或抛出自定义异常 } });
Résumé :
Lorsque nous rencontrons une exception d'erreur d'invocation de méthode Java rejetée (MethodInvocationRejectedErrorExceotion), nous pouvons augmenter la capacité du pool de threads, utiliser un pool de threads non bloquant, utiliser une file d'attente limitée ou définir Politique de refus pour résoudre l’exception. Choisir la solution appropriée en fonction de la situation spécifique peut garantir que le pool de threads peut gérer normalement toutes les demandes d'appel de méthode et améliorer la stabilité et la fiabilité du programme.
Référence :
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!