Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何阻止sling线程池中的多个线程执行同一语句?_Java_Multithreading_Aem - Fatal编程技术网

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

Java 如何阻止sling线程池中的多个线程执行同一语句?,java,multithreading,aem,Java,Multithreading,Aem,如何防止sling线程池中的线程执行以下语句:serv.getService().start(tic,info); 如果执行已由一个线程完成,则执行多次 我尝试使用一个标志,但似乎没有帮助 日志: 我的代码如下: private void sendBlock( service serv, String tic, Resource block, Update update, Info info, ResourceResolver resolver ) throws

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

我尝试使用一个标志,但似乎没有帮助

日志:

我的代码如下:

     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
关键字确保所有线程使用分配给字段的当前(相同)值。

非常感谢您的快速响应。这对我有用!我知道你的问题已经得到了回答,但是我可以问一下你的用例是什么吗?我从未在AEM项目中遇到使用volatile的需要。在处理作业时,作业线程池中的两个线程执行相同的语句,导致重复的请求。这导致了一个问题。