线程安全问题

来源:19-2 策略模式coding

孤独观测者

2021-02-23

图片描述
老师 这里把promotionStrategy传递给类变量 然后下一步再调用executePromotionStrategy方法
如果在多线程种,会不会在调用executePromotionStrategy方法的时候,类变量promotionStrategy已经被其他线程给覆盖了

写回答

1回答

geelylucky

2021-02-28

问题提的很棒同学~

对于变量的线程安全问题 可以使用线程封闭的思路

默认传入promotionStrategy 的这个变量对于单个线程 如果是new 构建的,是线程私有的那么就不会出现线程安全问题

策略模式一般会配合spring的bean使用,spring 的bean默认单例是不会出现线程安全的

如果不使用spring 声明bean,只要不是先构造一个promotionStrategy  ,传入多线程执行的任务中也不会的

badcase 是将promotionStrategy  作为参数传入多线程的task中 会出现线程不安全的问题

另外 jdk中也提供了threadloacl 工具类可以避免这个问题,可以将promotionStrategy 使用threadlocal包装后再传入线程task中也能保证线程安全

0
0

Java设计模式精讲-Debug方式+内存分析

系统学习设计原则,设计模式,锤炼编码内功,赢取高薪Offer

3430 学习 · 407 问题

查看课程