嗨 Stackoverflow 社区,
我有一个关于线程安全的问题。如果我有一个静态映射并用不同的对象填充它,这些对象线程安全吗,如果我只有他们不写的方法?
我创建了一个小示例:在这种情况下,getCommand 线程的返回值是否安全?
如何使用 JUnit 测试线程安全?
控制器
public class CommandController {
private static Map<String, Command> commandMap = initMap();
public static Map<String, Command> initMap() {
return new HashMap<String, Command>() {{
put("A", new CommandA());
put("B", new CommandB());
}};
}
public Command getCommand(String key) {
if(commandMap.containsKey(key)) {
return commandMap.get(key);
}
return null;
}
}
抽象类
public abstract class Command {
public abstract int calc(int value);
}
命令 A
public class CommandB extends Command {
@Override
public int calc(int value) {
value = value * 4;
return value;
}
}
命令 B
public class CommandA extends Command {
private int ab = 5;
@Override
public int calc(int value) {
return value * ab;
}
}