ip6*_*696 3 java spring multithreading
@Slf4j
@Service
public class SendServiceImpl implements SendService {
private final MessageService messageService;
private Message message;
public SendServiceImpl (MessageService messageService) {
this.messageService = messageService;
}
@Transactional
@Override
public void send(String messageGuid) {
message = messageService.getOne(messageGuid);
//...
}
Run Code Online (Sandbox Code Playgroud)
这个类线程安全吗?如果我像这样在 5 个线程中运行会出现什么问题:
taskExecutor.execute(() -> sendService .send(someGuid);//5 different guids
Run Code Online (Sandbox Code Playgroud)
在实践中,我研究了日志文件,发现同一实体使用不同的线程工作。message 我是否正确理解,在这种情况下,如果我像类字段一样声明消息,线程可以更改实体的值?
谁能详细解释一下吗?
默认情况下,@Service表示单个服务对象将为所有请求提供服务。因此,如果您在 a 的字段中保留可变状态@Service,则必须确保以线程安全的方式访问它。
这就是为什么可变状态通常不保存在@Service字段中的原因。
| 归档时间: |
|
| 查看次数: |
6672 次 |
| 最近记录: |