我正在写一个多线程的应用程序,在我ServerThread.run()
方法public方法,我用ServerSocket.accept()
接收新传入的连接。每当新连接到达时,ServerThread
创建一个名为ClientHandler
的其他线程来处理连接(接收/发送数据),并且在我的ServerThread
中,我有一个java.util.HashMap<ClientHandler, Socket>
来存储连接客户端的引用和相应的套接字。的Java如何处理一个线程
在我ServerThread
,我已经实现了一些其他的公共方法,如shutdown()
停止服务器线程,disconnect(int id)
关机特定客户端的连接等,这些方法通常是由我的GUI调用,从EDT线。
我测试过的代码,它的工作原理,但我不知道,如果是做到这一点的最好办法。我已经阅读了很多Java多线程教程,但是他们在自定义java.lang.Thread
子类中不添加其他公共方法。
特别是在我的ServerThread.run()
中,我使用的方法ServerSocket.accept()
应该是阻止。当我要关机我ServerThread
,我要叫ServerSocket.close()
强迫线程停止。
然而,当我打电话例如ServerThread.disconnect(int id)
关闭远程客户端的连接,它的工作原理。 ServerThread
应该在accept()
方法上阻塞?
所以,我的代码工作,但我不知道为什么,我想知道如果一个人能在java.lang.Thread
自定义子类中添加其他公共方法?
谢谢。
感谢您的答复@torquestomp,所以在我的情况,我需要建立一个新的类'Server'保持连接的客户端和引用的处理线程,还含有其它公共与方法,我可以关闭连接的特定客户。新的'ServerThread'没有别的,只是等待新的传入连接,并将处理线程的引用存储在'Server'对象中。 EDT使用'Server'对象的公共方法来处理处理线程,可以通过一个单例Server.getInstance()来检索它。这样更好吗? – vesontio
所以不建议把公共方法在一个线程,但它并不被禁止,因为我还需要方法'公共无效停止()'果然旗'running'到'FALSE'并停止'ServerThread'。 – vesontio
@vesontio根本不推荐扩展Thread。几乎从来没有一个好的理由去做,你的情况当然不需要它。 –