Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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多线程:停止以前的执行并启动新的_Java_Multithreading - Fatal编程技术网

Java多线程:停止以前的执行并启动新的

Java多线程:停止以前的执行并启动新的,java,multithreading,Java,Multithreading,我有一个代码块,应该只由一个线程执行。如果新线程到达这个块,它应该取消以前的执行并开始一个新的执行 例如,刷新缓存: public void refreshCache() { //refresh cache can take up to 20 minutes } 当然,我可以使用CompletableFuture运行它,将Future存储在AtomicReference中,并在新线程到达时取消它。但是,这是我唯一的选择 关于如何处理此类案件,是否有最佳做法?如果要运行多个服务实例,解决

我有一个代码块,应该只由一个线程执行。如果新线程到达这个块,它应该取消以前的执行并开始一个新的执行

例如,刷新缓存:

public void refreshCache() {
    //refresh cache can take up to 20 minutes
}
当然,我可以使用
CompletableFuture
运行它,将
Future
存储在
AtomicReference
中,并在新线程到达时取消它。但是,这是我唯一的选择


关于如何处理此类案件,是否有最佳做法?如果要运行多个服务实例,解决方案是什么?

什么服务的多个实例?
refreshCache()
访问什么样的外部资源?您将如何编写您的
CompletableFuture/AtomicReference
机制,以及为什么您觉得它对您的目的来说不够好?Re,“…最多需要20分钟。”这是一个巨大的时间。为什么从头开始比等待正在进行的刷新完成更好?是否因为正在进行的工作已经过时?如果一项需要20分钟才能完成的工作比每20分钟就变得毫无价值,那么您就有一个严重的体系结构问题。整个过程是否需要作为单个原子块来完成?我会想办法把它分成更小、独立的部分。它会更新SQL DB中的数据,我可以将它分成块,如果它被中断,我可以停止处理下一块,
CompletableFuture
将非常适合它。但是,如果有多个微服务具有这种可能性,那么它们可能都在更新相同的表。