在多线程中使用单例模式,java对象是有状态对象,此时线程是不安全的。
有状态对象就是有实例变量的类,可以进行赋值,可以保存数据,是非线程安全的。
无状态对象是没有实例变量的类,可以有final定义的常量,不能保存数据,是线程安全的。
有状态对象:
public class ReportTask {
private Task task;
public void doExcute(String message) {
task = TaskHolder.getTask(message);
if (task == null) {
LOGGER.info("task[{}]不存在,请检查配置是否正确",message);
}
task.execute();
}
}
以下是改为无状态对象:
public class ReportTask {
public void doExcute(String message) {
Task task = TaskHolder.getTask(message);
if (task == null) {
LOGGER.info("task[{}]不存在,请检查配置是否正确",message);
}
task.execute();
}
}
本文探讨了Java中多线程环境下有状态对象与无状态对象的区别,特别是在单例模式的应用场景下如何确保线程安全。通过示例对比了两种不同实现方式,并解释了为何无状态对象更有利于线程安全。
1768

被折叠的 条评论
为什么被折叠?



