Rumah >Java >javaTutorial >Bagaimana untuk menyelesaikan pengecualian ralat invocation kaedah Java ditolak (MethodInvocationRejectedErrorExceotion)

Bagaimana untuk menyelesaikan pengecualian ralat invocation kaedah Java ditolak (MethodInvocationRejectedErrorExceotion)

WBOY
WBOYasal
2023-08-19 20:37:49985semak imbas

Bagaimana untuk menyelesaikan pengecualian ralat invocation kaedah Java ditolak (MethodInvocationRejectedErrorExceotion)

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.

  1. Tingkatkan kapasiti kumpulan benang:
    Pengecualian ini boleh diselesaikan dengan meningkatkan bilangan maksimum benang dalam kumpulan benang. Ini boleh dicapai dengan mengubah suai fail konfigurasi kumpulan benang atau menetapkan parameter yang berkaitan dalam kod. Berikut ialah contoh kod khusus:
ExecutorService executor = Executors.newFixedThreadPool(10);   //创建一个固定大小为10的线程池
((ThreadPoolExecutor)executor).setMaximumPoolSize(20);   //增加最大线程数量为20
  1. Gunakan kumpulan benang tidak menyekat:
    Anda boleh menggunakan kumpulan benang tidak menyekat untuk menyelesaikan pengecualian ini. Kumpulan benang tidak menyekat akan mengembalikan tugas yang tidak diproses kepada pemanggil dan bukannya membuang pengecualian apabila bilangan maksimum utas dicapai. Berikut ialah contoh kod khusus:
ThreadPoolExecutor executor = new ThreadPoolExecutor(
    10,  //核心线程数量
    20,  //最大线程数量
    60,  //线程保持活跃时间
    TimeUnit.SECONDS,  //活跃时间的单位
    new LinkedBlockingQueue<Runnable>(),  //任务队列
    new ThreadPoolExecutor.CallerRunsPolicy());  //非阻塞策略,将未处理的任务返回给调用方
  1. Gunakan baris gilir bersempadan:
    Tetapkan baris gilir tugasan kumpulan benang kepada baris gilir terhad untuk mengelakkan baris gilir tugasan berkembang tanpa had, menyebabkan kumpulan benang tidak dapat menerima tugasan baharu . Berikut ialah contoh kod khusus:
ThreadPoolExecutor executor = new ThreadPoolExecutor(
    10,  //核心线程数量
    20,  //最大线程数量
    60,  //线程保持活跃时间
    TimeUnit.SECONDS,  //活跃时间的单位
    new ArrayBlockingQueue<Runnable>(100));  //有界任务队列,最大容量为100
  1. Menggunakan dasar penolakan:
    Anda boleh mengendalikan situasi apabila panggilan kaedah ditolak dengan menetapkan dasar penolakan. Dasar penolakan menentukan perkara yang perlu dilakukan apabila kumpulan benang enggan menerima tugas baharu. Berikut ialah contoh kod mudah:
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:

  • Dokumentasi kumpulan benang Java: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/concurrent/ThreadPoolExecutor.html
  • Java Tutorial kolam benang: https://www.baeldung.com/thread-pool-java-and-guava

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn