项目线程安全

216 阅读1分钟

项目中没考虑线程安全

@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 单个进程之间的多个线程 但对于分布式服务,多个进程之间容易出现问题。