3

java | 正确的处理异常

 1 year ago
source link: https://benpaodewoniu.github.io/2023/01/03/java165/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何在线程池中处理异常。

自定义处理

package com.redisc;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

@Slf4j(topic = "c.Test")
public class Run {

public static void main(String[] args) throws InterruptedException, ExecutionException {
ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);

pool.scheduleWithFixedDelay(() -> {
log.debug("1");
try {
int i = 1 / 0;
} catch (Exception e) {
log.error("error: ", e);
}
}, 1, 1, TimeUnit.SECONDS);
}
}
22:34:24.663 [pool-1-thread-1] DEBUG c.Test - 1
22:34:24.670 [pool-1-thread-1] ERROR c.Test - error:
java.lang.ArithmeticException: / by zero
at com.redisc.Run.lambda$main$0(Run.java:19)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

异常信息返回

package com.redisc;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

@Slf4j(topic = "c.Test")
public class Run {

public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService pool = Executors.newFixedThreadPool(1);

Future<Boolean> f = pool.submit(() -> {
log.debug("task");
int i = 1 / 0;
return true;
});
log.debug("result:{}", f.get());
}
}
22:41:50.129 [pool-1-thread-1] DEBUG c.Test - task
Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.ArithmeticException: / by zero
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at com.redisc.Run.main(Run.java:18)
Caused by: java.lang.ArithmeticException: / by zero
at com.redisc.Run.lambda$main$0(Run.java:15)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK