可以阻止java线程';的方法是否由另一个线程执行?

可以阻止java线程';的方法是否由另一个线程执行?,java,multithreading,Java,Multithreading,计划创建一个带有登录(接受新客户端并创建处理它们的线程)和注销方法的服务器线程。登录方法将被socket.accept()方法阻止以等待客户端。如果服务器线程被另一个方法阻止,其他想要注销的客户端是否能够在服务器线程上调用注销方法?否。如果线程被阻止,则它执行任何附加处理的唯一方法是唤醒并继续执行 这就是说,其他客户端线程可以调用注销方法,该方法从它们自己的线程中操纵共享数据结构。您可能需要研究这种并发方法,或者在服务器线程上使用NIO和非阻塞IO。线程是一种执行流。这里有很多。连接接受线程在a

计划创建一个带有登录(接受新客户端并创建处理它们的线程)和注销方法的服务器线程。登录方法将被socket.accept()方法阻止以等待客户端。如果服务器线程被另一个方法阻止,其他想要注销的客户端是否能够在服务器线程上调用注销方法?

否。如果线程被阻止,则它执行任何附加处理的唯一方法是唤醒并继续执行


这就是说,其他客户端线程可以调用注销方法,该方法从它们自己的线程中操纵共享数据结构。您可能需要研究这种并发方法,或者在服务器线程上使用NIO和非阻塞IO。

线程是一种执行流。这里有很多。连接接受线程在
accept()
中被阻止。如果我理解正确,“客户端”线程已经启动,并且正在处理与连接的客户端的对话。我猜“在服务器线程上调用注销方法”实际上是指“在类上调用
logout()
方法,该类也有
login()
方法”。由于“客户端”线程将执行此操作,因此应该可以,除非
login()
logout()
在某个地方没有争夺同一个锁。

我认为您应该在一个线程中使用accept,该线程只需创建一个线程处理程序并将此连接添加到其中,ThreadHandle是另一个线程,它将登录用户,然后执行任何您想要的操作

我有一个类似于聊天服务器的代码:

while(true)
{
Socket clientSocket = server.accept();
ClientThreadHandler c = new ClientThreadHandler(clientSocket);
server.addClientThread(c);
}
处理程序现在将尝试对客户端进行身份验证

还可以实现一个心跳,在该心跳中,服务器将向已连接且经过身份验证的客户机发送一个数据包,检查客户机是否仍在运行。否则,服务器将关闭连接。 ThreadHandler将始终侦听并处理客户请求。
不要忘记同步将从不同线程访问的方法。

提供一些代码怎么样。请澄清您的问题。线程没有方法。类
Thread
的实例和运行线程是两件截然不同的事情。