[英]Java thread monitor other threads
我有一个名为class1的类,其中包含以下代码:
public class class1 {
public static ServerSocket serverSocket;
public static void main(String args[]) {
try {
serverSocket = new ServerSocket(1234);
while (true) {
class2 t = new class2(serverSocket.accept());
t.start();
}
} catch (IOException ex) {
Logger.getLogger(LisenerServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
因此,在第1类中,我为每个连接打开一个新线程。
我还有另一个名为class2的类,其中包含以下代码:
public class class2 extends Thread {
private Socket socket;
public class2(Socket socket) {
try {
this.socket = socket;
in = new BufferedInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException ex) {
Logger.getLogger(ListenerServerThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
while (true) {
try {
// do something with in and out.
} catch (IOException ex) {
System.out.println(ex);
break;
}
}
}
}
我希望客户端(不是Java程序)连接到我的套接字服务器并发送sting命令,并且我想知道客户端(我将通过在类1中打开的线程名和/或ID标识客户端)是否连接。 。
我可以让另一个类(比如说第3类)打开一个线程来连续检查客户端是否连接吗? 如果可以,请给我一个例子吗?
我希望我能正确回答这个问题,根据我的理解,您可以保留连接的客户端的全局列表,例如:
List<class2> MyList;
当class2线程启动时,它将自身添加到列表中:
public class2(Socket socket) {
try {
this.socket = socket;
in = new BufferedInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
MyList.add(this);
}
catch (IOException ex)
{
Logger.getLogger(ListenerServerThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
当线程终止时,它将自己从列表中删除:
Try
{
while (true) {
try {
// do something with in and out.
} catch (IOException ex) {
System.out.println(ex);
break;
}
}
}
finally {
for (int i=0; i < MyList.size(), i++)
if (MyList.get(i) == this)
{
MyList.delete(i);
break;
}
}
这样,您可以通过其线程获得已连接客户端的列表。 您可以在class2中添加一些方法来访问更多信息,例如套接字,套接字的运行时间等。此外,您还应该考虑使用互斥锁或某些其他同步方法访问此列表(添加/删除时)。 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.