首页 文章

在JavaFx中管理至少三个线程

提问于
浏览
0

我正在尝试配置我的服务器以管理至少3个客户端,但是当我这样做时,即使在连接第一个客户端之前,我也会收到内存不足错误 . 我怎样才能改进它?在 ThreadedEchoHandler() 中,我是接受客户端请求的部分,以及包含服务器必须执行的所有操作的run方法 .

public void initModel() throws IOException {
    contenutoTextArea.append("Waiting for connections\n");
    textarea.setText(contenutoTextArea.toString());
    s = new ServerSocket(5000);
    while (true) {
        Runnable r = new ThreadedEchoHandler();
        new Thread(r).start();
    }
}

编辑:ThreadedEchoHandler的开始:

lass ThreadedEchoHandler implements Runnable {

    private Socket incoming;

    private String nomeAccount = "";

    public void run() {
        try {
            incoming = s.accept();
        } catch (IOException ex) {
            System.out.println("Unable to accept requests");
        }
    }

1 回答

  • 1

    你应该在 while 循环发生的同一个线程中执行 accept ,然后在有新的接受连接后,启动一个新线程:

    while (true) {
        Socket incoming = s.accept();
        Runnable r = new ThreadedEchoHandler(incoming);
        new Thread(r).start();
    }
    

    并修改 ThreadEchoHandler 以从外部获取其 Socket

    class ThreadedEchoHandler implements Runnable {
        final private Socket incoming;
        private String nomeAccount = "";
    
        ThreadedEchoHandler(Socket incoming) {
            this.incoming = incoming;
        }
    
        public void run() {
            // do stuff
        }
    }
    

    当然你可以用各种方式组织它,比如 ThreadedEchoHandler 可以从构造函数启动它的线程,甚至也可以执行 accept ,但同样,它必须在启动线程之前发生:

    class ThreadedEchoHandler implements Runnable {
        final private Socket incoming;
        private String nomeAccount = "";
    
        ThreadedEchoHandler(ServerSocket serv) throws IOException {
            incoming = serv.accept();
            new Thread(this).start();
        }
    
        public void run() {
            // do stuff
        }
    }
    

    然后循环可能是这样的:

    while (true) new ThreadedEchoHandler(s);
    

相关问题