Heim  >  Artikel  >  Java  >  So lösen Sie die Ausnahme „Abgelehnter Java-Methodenaufruf“ (MethodInvocationRejectedException)

So lösen Sie die Ausnahme „Abgelehnter Java-Methodenaufruf“ (MethodInvocationRejectedException)

PHPz
PHPzOriginal
2023-08-20 17:53:091227Durchsuche

So lösen Sie die Ausnahme „Abgelehnter Java-Methodenaufruf“ (MethodInvocationRejectedException)

So lösen Sie die Ausnahme „MethodInvocationRejectedException“ bei Java-Methodenaufrufen:
Bei der Verwendung der Java-Entwicklung stoßen wir häufig auf verschiedene abnormale Situationen. Unter diesen ist die Ausnahme, dass der Java-Methodenaufruf abgelehnt wurde (MethodInvocationRejectedException), eine häufige Ausnahme. In diesem Artikel wird die Ausnahme „MethodInvocationRejectedException“ vorgestellt und Methoden und Codebeispiele zur Lösung der Ausnahme bereitgestellt.

Was ist MethodInvocationRejectedException?
MethodInvocationRejectedException ist eine Ausnahme im Spring-Framework. Dies tritt normalerweise auf, wenn ein Methodenaufruf abgelehnt wird. Wenn wir den Thread-Pool oder asynchrone Aufgaben des Spring-Frameworks verwenden und der Thread-Pool oder die Aufgabenwarteschlange voll ist, werden neue Methodenaufrufe abgelehnt und eine MethodInvocationRejectedException-Ausnahme ausgelöst.

Methoden zur Lösung von MethodInvocationRejectedException:

  1. Erhöhen Sie die Kapazität des Thread-Pools oder der Aufgabenwarteschlange: Zuerst können wir die MethodInvocationRejectedException lösen, indem wir die Kapazität des Thread-Pools oder der Aufgabenwarteschlange erhöhen. Dadurch können die gleichzeitigen Verarbeitungsfähigkeiten des Systems verbessert und die Ablehnung von Aufgaben vermieden werden. Wir können beispielsweise die maximale Anzahl von Threads im Thread-Pool oder die Größe der Aufgabenwarteschlange erhöhen.
  2. Verwenden Sie eine geeignete Ablehnungsstrategie: Zweitens können wir die MethodInvocationRejectedException-Ausnahme lösen, indem wir eine geeignete Ablehnungsstrategie festlegen. Das Spring-Framework bietet eine Vielzahl von Ablehnungsrichtlinien zur Auswahl, z. B. die Verwendung der AbortPolicy-Richtlinie (die Standardrichtlinie löst eine Ablehnungsausnahme aus), die Verwendung der CallerRunsPolicy-Richtlinie (der Aufrufer-Thread führt die abgelehnte Aufgabe aus) und die Verwendung der DiscardPolicy-Richtlinie ( (direktes Verwerfen der abgelehnten Aufgabe). Aufgaben) usw. Wir können eine geeignete Ablehnungsstrategie basierend auf den tatsächlichen Bedürfnissen auswählen.

Das Folgende ist ein Codebeispiel, das den Thread-Pool verwendet, um zu demonstrieren, wie eine geeignete Ablehnungsrichtlinie für die Behandlung der MethodInvocationRejectedException-Ausnahme festgelegt wird:

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();
    }
}

Im obigen Code erstellen wir einen Thread-Pool-Executor und setzen die maximale Anzahl von Threads auf 1 , Aufgabe Die Warteschlangengröße beträgt 1. Wenn die Anzahl der übermittelten Aufgaben 1 überschreitet, verwendet der Thread-Pool die CallerRunsPolicy-Richtlinie, um die abgelehnten Aufgaben auszuführen, dh die Aufgaben werden zur Ausführung an den aufrufenden Thread übergeben.

Durch die oben genannten Methoden können wir die MethodInvocationRejectedException-Ausnahme lösen und die gleichzeitigen Verarbeitungsfähigkeiten des Systems verbessern. Es ist jedoch zu beachten, dass zu viele Threads und zu große Aufgabenwarteschlangen zu einem übermäßigen Verbrauch von Systemressourcen führen können. Daher müssen Sie diese beim Festlegen der Thread-Pool-Parameter entsprechend der tatsächlichen Situation anpassen.

Zusammenfassung:
Die Ausnahme „Java-Methodenaufruf abgelehnt“ (MethodInvocationRejectedException) ist eine häufige Ausnahme im Spring-Framework, die normalerweise auftritt, wenn der Thread-Pool oder die Aufgabenwarteschlange voll ist. Um diese Ausnahme zu beheben, können wir die Kapazität des Thread-Pools oder der Aufgabenwarteschlange erhöhen oder eine entsprechende Ablehnungsrichtlinie verwenden. Bei der tatsächlichen Verwendung muss es an die Systemanforderungen angepasst werden und eine übermäßige Ressourcennutzung vermieden werden.

Wir hoffen, dass die in diesem Artikel bereitgestellten Methoden und Codebeispiele den Lesern dabei helfen können, MethodInvocationRejectedException-Ausnahmen zu lösen und Thread-Pools und asynchrone Aufgaben besser zu nutzen, um die Systemleistung während des Entwicklungsprozesses zu verbessern.

Das obige ist der detaillierte Inhalt vonSo lösen Sie die Ausnahme „Abgelehnter Java-Methodenaufruf“ (MethodInvocationRejectedException). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn