gpt4 book ai didi

java - 我可以在fixedThreadPool中使用静态LOGGER对象吗?

转载 作者:行者123 更新时间:2023-12-02 11:33:18 24 4
gpt4 key购买 nike

有一个 spring-mvc Web 项目。如果用户做了一些重要的事情,应用程序必须记录日志并向服务层中用户的电子邮件发送消息(顺便说一句,用户会做很多重要的事情)。代码如下:

private static final Logger LOGGER = LoggerFactory.getLogger(MessageServiceImpl.class);

private static final ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);

fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
if (emailParams != null && EmailUtil.sendEmail(emailParams)) {
LOGGER.info("send email succeed");
} else {
LOGGER.warn("send email failed");
}
}
});

我遇到了两个问题:

  1. 我可以在fixedThreadPool中使用静态LOGGER对象吗?

    如果我在fixedThreadPool中使用静态记录器对象,会发生什么?僵局?比赛条件?还是什么都没有?

  2. 我应该将fixedThreadPool定义为静态还是非静态?

    我认为:

    如果fixedThreadPool是静态的并且我不调用它的shutdown(),那么它将存在util web项目关闭。

    如果fixedThreadPool是not static,每个请求都可能产生一个fixedThreadPool。最后,这个web项目会有很多无用的fixedThreadPool,可能会产生Out-Of-Memery。

最佳答案

这取决于日志框架的实现。大多数实现都是线程安全的,但它们也可能是阻塞的。 Log4j 是线程安全的。

参见Is SLF4J thread-safe? .

关于java - 我可以在fixedThreadPool中使用静态LOGGER对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49127711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com