项目中没考虑线程安全
@Service
@Transactional
public class MedicalPopularMaterialService implements MedicalPopularMaterialServiceInterface {
//成员属性
public Set<String> labels = new LinkedHashSet<>();
private void makeMaterial(MedicalPopularMaterialBaseCommand command, MedicalPopularMaterial material) {
//没有考虑线程安全
labels.addAll(command.getLabels());
settingServiceInterface.setGlobalSetting(A,B,labels, command.getCreatedUserId());
}
}
复制代码
MedicalPopularMaterialService是单例的(被Spring创建的类是单例),同一个对象,,当两个线程同时访问,
解决线程安全的方法:
分布式锁
Redis锁机制
sychornized 单个进程之间的多个线程 但对于分布式服务,多个进程之间容易出现问题。