如何阻止 sling 线程池中的多个线程执行同一条语句?

How to stop multiple threads in the sling threadpool from executing the same statement?

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

我尝试使用标志 _alreadyExecuted 但这似乎没有帮助。

日志:https://i.stack.imgur.com/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 关键字确保所有线程使用分配给该字段的当前(相同)值。