Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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,在使用线程池时,仍然为特定任务使用单个线程对象是否有益。我想知道,对于Java中的服务器,监听连接的线程是否应该与其他线程共享其资源,然后从这个监听线程分配这些资源?我可能也没有抓住要点,因为我不熟悉这个概念。我会创建两个池,一个用于倾听,一个用于内部任务。这样,您就不会让服务器处于无法侦听连接的风险中 如果内部任务偶尔只是一个线程,那么它的池可能会很小,但至少它是安全隔离的。是的,必须并发运行的单个任务可以在线程池之外有自己的线程。强制每个线程都成为池的一部分可能会模糊您的设计,因为您需要各种

在使用线程池时,仍然为特定任务使用单个线程对象是否有益。我想知道,对于Java中的服务器,监听连接的线程是否应该与其他线程共享其资源,然后从这个监听线程分配这些资源?我可能也没有抓住要点,因为我不熟悉这个概念。

我会创建两个池,一个用于倾听,一个用于内部任务。这样,您就不会让服务器处于无法侦听连接的风险中


如果内部任务偶尔只是一个线程,那么它的池可能会很小,但至少它是安全隔离的。

是的,必须并发运行的单个任务可以在线程池之外有自己的线程。强制每个线程都成为池的一部分可能会模糊您的设计,因为您需要各种机制使并发任务看起来像工作线程。

在服务器需要维护全局应用程序状态的情况下,可能需要资源共享(例如,使用AtomicLong表示服务器服务的请求数等)。主线程通常会等待,准备接受传入的连接/请求。然后更新全局状态(如命中计数器),根据新请求(通常为可运行或可调用)创建新的“作业”,并将其提交到线程池(java.util.concurrent)提供了它们。

线程池的目的只是帮助您管理线程。换句话说,线程池为您处理线程的创建和终止,并将工作分配给空闲线程。被阻止或等待的线程将不会接收新任务

您的连接侦听器可能处于无限循环中等待连接,因此永远不会处于空闲状态(尽管它可能处于等待状态)。由于这种情况,连接侦听器线程将永远无法接收新任务,因此将其与其他线程合用是没有意义的


连接侦听和连接处理也是两件不同的事情。从这个角度来看,连接侦听器也不应该与连接处理程序一起使用。

类似于@larsman的评论,我会做任何你认为更简单更清晰的事情。我倾向于使用一个线程池来处理所有事情,因为它看起来很简单更容易管理。你不必这样做,倾听任务可以是它自己的线程。

是的,我看不出你为什么要将accept线程放在线程池中。好吧,那太好了-我只想知道。这个答案对我很有用,因为我也不确定使用多个线程池是否是一个好的练习,所以不要我会让听力任务循环直到完成,并且永远不会放弃线程。这样,另一个线程就不会把听力任务置于危险之中。