gpt4 book ai didi

java - Java如何处理线程中的公共(public)方法

转载 作者:行者123 更新时间:2023-11-30 08:27:50 25 4
gpt4 key购买 nike

我正在编写一个多线程应用程序,在我的 ServerThread.run() 中方法,我使用 ServerSocket.accept()接收新的传入连接。每当有新连接到达时,ServerThread创建另一个名为 ClientHandler 的线程处理连接(接收/发送数据),并在我的 ServerThread , 我有一个 java.util.HashMap<ClientHandler, Socket>存储连接的客户端和相应套接字的引用。

在我的 ServerThread ,我已经实现了一些其他公共(public)方法,例如 shutdown()停止服务器线程,disconnect(int id)关闭特定客户端的连接等。这些方法通常由我的 GUI 从 EDT 线程调用。

我已经测试了代码,它有效,但我不确定这是否是执行此操作的最佳方法。我读过很多 Java 多线程教程,但他们没有在他们的自定义中添加其他公共(public)方法 java.lang.Thread子类。

特别是在我的ServerThread.run() ,我用过方法ServerSocket.accept()这应该是阻塞。当我想关闭我的 ServerThread ,我必须调用ServerSocket.close()强制线程停止。

但是,当我调用例如 ServerThread.disconnect(int id) 时关闭远程客户端的连接,它可以工作。是 ServerThread应该在 accept() 上阻塞方法?

所以,我的代码可以工作,但我不知道为什么,我想知道是否可以在 java.lang.Thread 的自定义子类中添加其他公共(public)方法。 ??

谢谢。

最佳答案

您不向 Thread 类添加公共(public)方法的原因恰恰是因为出现了这种混淆 - 有一种直觉认为 Thread 类本身“拥有”这些方法的执行,而在 Java 中它 - 总是 -拥有执行的调用线程。

当 EDT 线程调用 ServerThread.disconnect(id) 时,断开连接方法中的代码由 EDT 线程而不是 ServerThread 运行。这里的关键点是 Thread ServerThread 和 Object ServerThread 在语义上不是完全相同的东西 - 一个对象不能被“阻塞”在同一个Thread 可以的方式,表达式甚至没有意义。

关于java - Java如何处理线程中的公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20587288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com