Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan pengecualian kaedah Java yang ditolak (MethodInvocationRejectedException)

Bagaimana untuk menyelesaikan pengecualian kaedah Java yang ditolak (MethodInvocationRejectedException)

PHPz
PHPzasal
2023-08-20 17:53:091267semak imbas

Bagaimana untuk menyelesaikan pengecualian kaedah Java yang ditolak (MethodInvocationRejectedException)

Cara menyelesaikan pengecualian kaedah Java yang ditolak (MethodInvocationRejectedException)
Dalam proses menggunakan pembangunan Java, kita sering menghadapi pelbagai situasi yang tidak normal. Antaranya, pengecualian kaedah Java yang ditolak (MethodInvocationRejectedException) adalah pengecualian biasa. Artikel ini akan memperkenalkan pengecualian MethodInvocationRejectedException dan menyediakan kaedah dan contoh kod untuk menyelesaikan pengecualian.

Apakah MethodInvocationRejectedException?
MethodInvocationRejectedException ialah pengecualian dalam rangka kerja Spring. Ia biasanya berlaku apabila panggilan kaedah ditolak. Apabila kami menggunakan kumpulan utas rangka kerja Spring atau tugas tak segerak, jika kumpulan utas atau baris gilir tugas penuh, panggilan kaedah baharu akan ditolak dan pengecualian MethodInvocationRejectedException akan dilemparkan.

Kaedah untuk menyelesaikan MethodInvocationRejectedException:

  1. Tingkatkan kapasiti kumpulan benang atau baris gilir tugas: Pertama, kita boleh menyelesaikan MethodInvocationRejectedException dengan meningkatkan kapasiti kumpulan benang atau baris gilir tugas. Ini boleh meningkatkan keupayaan pemprosesan serentak sistem dan mengelakkan penolakan tugas. Sebagai contoh, kita boleh meningkatkan bilangan maksimum benang dalam kumpulan benang atau saiz baris gilir tugas.
  2. Gunakan strategi penolakan yang sesuai: Kedua, kita boleh menyelesaikan pengecualian MethodInvocationRejectedException dengan menetapkan strategi penolakan yang sesuai. Rangka kerja Spring menyediakan pelbagai dasar penolakan untuk dipilih, seperti menggunakan dasar AbortPolicy (dasar lalai akan membuang pengecualian penolakan), menggunakan dasar CallerRunsPolicy (urutan pemanggil melaksanakan tugas yang ditolak) dan menggunakan dasar DiscardPolicy ( langsung membuang tugasan yang ditolak). Kita boleh memilih strategi penolakan yang sesuai berdasarkan keperluan sebenar.

Berikut ialah contoh kod menggunakan kumpulan benang untuk menunjukkan cara menetapkan dasar penolakan yang sesuai untuk mengendalikan pengecualian 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();
    }
}

Dalam kod di atas, kami mencipta pelaksana kumpulan benang dan menetapkan bilangan maksimum utas kepada 1 , tugas Saiz baris gilir ialah 1. Apabila bilangan tugasan yang diserahkan melebihi 1, kumpulan benang akan menggunakan dasar CallerRunsPolicy untuk melaksanakan tugas yang ditolak, iaitu, tugasan akan diserahkan kepada urutan pemanggil untuk dilaksanakan.

Melalui kaedah di atas, kami boleh menyelesaikan pengecualian MethodInvocationRejectedException dan meningkatkan keupayaan pemprosesan serentak sistem. Walau bagaimanapun, perlu diingatkan bahawa terlalu banyak benang dan baris gilir tugas yang terlalu besar boleh menyebabkan penggunaan sumber sistem yang berlebihan Oleh itu, apabila menetapkan parameter kumpulan benang, anda perlu melaraskannya mengikut situasi sebenar.

Ringkasan:
Pengecualian panggilan ditolak kaedah Java (MethodInvocationRejectedException) ialah pengecualian biasa dalam rangka kerja Spring, yang biasanya berlaku apabila kumpulan benang atau baris gilir tugas penuh. Untuk menyelesaikan pengecualian ini, kami boleh meningkatkan kapasiti kumpulan benang atau baris gilir tugas, atau menggunakan dasar penolakan yang sesuai. Dalam penggunaan sebenar, ia perlu diselaraskan mengikut keperluan sistem dan mengelakkan penggunaan sumber yang berlebihan.

Kami berharap kaedah dan contoh kod yang disediakan dalam artikel ini dapat membantu pembaca menyelesaikan pengecualian MethodInvocationRejectedException dan menggunakan kumpulan benang dan tugas tak segerak dengan lebih baik untuk meningkatkan prestasi sistem semasa proses pembangunan.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan pengecualian kaedah Java yang ditolak (MethodInvocationRejectedException). 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