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
在cachedThreadPool Java中手动终止线程_Java_Multithreading_Threadpool - Fatal编程技术网

在cachedThreadPool Java中手动终止线程

在cachedThreadPool Java中手动终止线程,java,multithreading,threadpool,Java,Multithreading,Threadpool,我知道,当我使用cachedThreadPool时,如果线程空闲超过60秒,它们将自动被终止。但是如何手动杀死cachedThreadPool中的此类线程 编辑以解释我的初始问题: 我的问题是: 我有一个程序,用户可以启动几个进程。所有这些过程都应该并行执行。到目前为止还不错,但有时某些传入进程应该按顺序处理。当两个进程具有相同的属性(相同的路径)时,就会发生这种情况 所以我想创建一个cachedThreadPool,如果没有一个线程与新的传入进程具有相同的路径,那么应该始终创建一个新线程。(不

我知道,当我使用
cachedThreadPool
时,如果线程空闲超过60秒,它们将自动被终止。但是如何手动杀死
cachedThreadPool
中的此类线程

编辑以解释我的初始问题

我的问题是:

我有一个程序,用户可以启动几个进程。所有这些过程都应该并行执行。到目前为止还不错,但有时某些传入进程应该按顺序处理。当两个进程具有相同的属性(相同的路径)时,就会发生这种情况

所以我想创建一个cachedThreadPool,如果没有一个线程与新的传入进程具有相同的路径,那么应该始终创建一个新线程。(不幸的是,我不知道该怎么做,也不知道有什么方法可用)


现在我想到了。我一直想给cachedThreadPool的新创建的线程一个worker,它有一个队列(最初这个队列包含应该处理的传递的进程)。然后,一旦处理完这个进程,线程就应该等待60秒。如果在这60秒内没有提交其队列中的其他进程,则可以终止它,否则它应该始终处理该队列。但通过始终检查队列中是否有新进程,线程不会进入空闲状态,也不会自动终止。所以我想我可以手动杀死它。

为什么需要这样做?你无法以任何方式正确地杀死Java中的线程,更不用说在
缓存线程池中了,那么你为什么认为需要这样做呢?如果60秒对你来说太多,它可以缩短。此外,线程池的关键是它为你管理线程。如果您想手动终止那里的线程,那么您就无法达到线程池的目的。因此,一般来说,你应该重新考虑你的方法。你还需要避免这种情况。不要问如何做某事(这可能是一个完全错误的方法,就像这里),而是解释你的问题,这样你就可以提出一个解决方案。最简单的解决方案可能是在“属性”或表示此公共属性的公共对象实例上使用同步块。但是,如果单个任务占用资源很长时间,并且有许多任务希望访问同一资源,则可能会出现问题。在这些情况下,许多线程可能会等待第一个线程完成任务,而使用其他资源并可以运行的任务则会一直等待。如果您在这种情况下,可以使用ForkJoinPool的ManagedBlocker机制。为什么需要这样做?您无法以任何方式正确地杀死Java中的线程,更不用说在
CachedThreadPool
中了,那么您认为为什么需要这样做呢?如果60秒对你来说太多,它可以缩短。此外,线程池的关键是它为你管理线程。如果您想手动终止那里的线程,那么您就无法达到线程池的目的。因此,一般来说,你应该重新考虑你的方法。你还需要避免这种情况。不要问如何做某事(这可能是一个完全错误的方法,就像这里),而是解释你的问题,这样你就可以提出一个解决方案。最简单的解决方案可能是在“属性”或表示此公共属性的公共对象实例上使用同步块。但是,如果单个任务占用资源很长时间,并且有许多任务希望访问同一资源,则可能会出现问题。在这些情况下,许多线程可能会等待第一个线程完成任务,而使用其他资源并可以运行的任务则会一直等待。在这种情况下,可以使用ForkJoinPool的ManagedBlocker机制。