【发布时间】:2019-11-28 15:00:47
【问题描述】:
免责声明:我对 Java 还很陌生,所以这可能是一个愚蠢的问题。 我们开始吧。
我正在编写一个程序,它侦听端口、接受连接、执行其操作并关闭端口。
我希望它在它自己的线程中运行,该线程处理完整的通信。因此,ServerSocket.accept() 将在线程中启动。
但是我怎样才能只在需要时才生成线程呢?如果我还没有使用 ServerSocket.accept(),我不知道我是否收到了数据,但是如果我在 main 方法中这样做,我将无法在这个打开时接受一个新的。
为了清楚起见,一些示例代码省略了导入:
public class communicator implements Runnable{
private ServerSocket server;
private Socket socket;
Thread t;
communicator(ServerSocket server){
this.server = server;
t = new Thread(this,"MyThread");
t.start();
}
public void run() {
try {
socket = server.accept();
//do stuff
socket.close();
} catch (IOException ex) {
Logger.getLogger(communicator.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
和主类:
public class test {
private static ServerSocket server;
private static Socket socket;
public static void main(String[] args) throws IOException{
server = new ServerSocket(123);
communicator comm = new communicator(server);
}
}
或者我可以使用类似“如果一个线程处于活动状态,则提供一个新线程”之类的东西?
谢谢。
【问题讨论】:
-
我不明白这个问题。如果您在需要时生成一个接受套接字的线程,您将不会在主线程中调用
accept(),因此您不会遇到您描述的问题,因此您已经有了解决方案。那么你的问题是什么? -
我有一个接受连接的线程。虽然这是开放的,但我可以获得另一个请求,但如果没有其他线程可以接受它,则无法接受。所以我需要另一个线程,但我不知道是否有另一个请求,所以我总是需要提供一个免费线程,但由于我不知道会有多少连接,我需要有很多线程准备好了,以防万一。
标签: java multithreading sockets