Безопасность резьбы при использовании CompletableFuture

#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. Пожалуйста, используйте примеры кода, которые правильно компилируются, а не псевдокод.