Cara menyelesaikan pengecualian ralat panggilan kaedah Java yang ditolak (MethodInvocationRejectedErrorExceotion)
Pengenalan:
Dalam pengaturcaraan Java, apabila kami menggunakan kumpulan berbilang benang atau benang untuk melaksanakan panggilan kaedah, kadangkala kami mungkin menghadapi panggilan kaedah yang ditolak ExceorrorInvocationRejected. ). Pengecualian ini menghalang utas daripada melaksanakan kaedah dengan betul dan boleh menyebabkan program ditamatkan. Artikel ini menerangkan cara menyelesaikan pengecualian ini dan menyediakan contoh kod yang sepadan.
Sebab pengecualian:
Pengecualian ralat panggilan kaedah ditolak biasanya disebabkan oleh pengehadan sumber kumpulan benang. Apabila bilangan benang dalam kumpulan benang mencapai had maksimum dan permintaan panggilan kaedah baharu masuk, kumpulan benang akan menolak untuk memanggil kaedah dan membuang pengecualian.
Penyelesaian:
Berikut adalah beberapa penyelesaian, anda boleh memilih penyelesaian yang sesuai dengan anda mengikut situasi tertentu.
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) { //执行自定义的处理逻辑,例如日志记录或抛出自定义异常 } });
Ringkasan:
Apabila menghadapi pengecualian ralat yang ditolak permohonan kaedah Java (MethodInvocationRejectedErrorExceotion), kita boleh meningkatkan kapasiti kumpulan benang, menggunakan kumpulan benang tidak menyekat, menggunakan baris gilir atau set yang dibatasi Tolak dasar untuk menyelesaikan pengecualian. Memilih penyelesaian yang sesuai berdasarkan situasi tertentu boleh memastikan bahawa kumpulan benang boleh mengendalikan semua permintaan panggilan kaedah secara normal dan meningkatkan kestabilan dan kebolehpercayaan program.
Rujukan:
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan pengecualian ralat invocation kaedah Java ditolak (MethodInvocationRejectedErrorExceotion). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!