#java #multithreading #concurrency #completable-future
Вопрос:
У меня есть приведенный ниже код.
ServiceA.m1() вызывается несколькими потоками из другого класса.Является ли приведенный ниже код потокобезопасным?Если да, то почему?
@Service
ServiceA
{
@Autowired
private ServiceB serviceB;
m1(OrderInfo orderInfo)
{
///changing object values
orderInfo.setTime(..);
orderInfo.setId(..);
CompletableFuture.runAsync(() -> {
serviceB.m2(orderInfo)
},myCustomExecutor);
}
}
Комментарии:
1. Основываясь на опубликованном коде,
ServiceA
у него нет другого состояния, кромеServiceB
того, которое кажется просто делегатом, поэтому, еслиServiceB
потокобезопасно (без состояния), тоServiceA
потокобезопасно. Чтобы убедиться, что службы не имеют состояния, отметьте всех делегатов как окончательных, например, неизменяемые классы являются потокобезопасными.2. @AndrewS Он снабжен
Service
аннотацией (Весенняя загрузка). Так что это синглтон бин3. Пожалуйста, используйте примеры кода, которые правильно компилируются, а не псевдокод.