gpt4 book ai didi

java - 如何停止悬吊线程池中的多个线程执行同一条语句?

转载 作者:行者123 更新时间:2023-12-03 13:08:48 27 4
gpt4 key购买 nike

如何防止吊索线程池中的线程执行以下语句:serv.getService()。start(tic,info);
如果执行已由一个线程完成多次?

我尝试使用_alreadyExecuted标志,但这似乎无济于事。

日志:/image/x8jZw.png

我的代码如下,

     private void sendBlock( service serv, String tic, Resource block, 
Update update, Info info, ResourceResolver resolver ) throws
IOException {
private Boolean _alreadyExecuted = Boolean.FALSE;
if( tic != null ) {
String tic = null;
if(!_alreadyExecuted){
getLogger().info("Before startSubmission. Currently _alreadyexecuted is " +_alreadyExecuted);
serv.getService().start( tic, info );
getLogger().info("After startSubmission, _alreadyexecuted is about to change to true. Currently _alreadyexecuted is " +_alreadyExecuted);
_alreadyExecuted = Boolean.TRUE;
getLogger().info("After startSubmission, _alreadyexecuted has been changed to true. Currently _alreadyexecuted is " +_alreadyExecuted);
}
}
}

最佳答案

将字段更改为volatile:

 private volatile Boolean _alreadyExecuted = Boolean.FALSE;

在多线程执行环境中,允许线程缓存字段的值(通常这样做)。关键字 volatile确保所有线程使用分配给该字段的当前(相同)值。

关于java - 如何停止悬吊线程池中的多个线程执行同一条语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45702132/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com