TCP服务器接受连接后新线程的代码不执行

Code of new thread after accepting the connection in TCP server isn't executed

我有以下 TCP 服务器:

public class Server {

    private Connection db;
    private Statement statement;
    private ServerSocket socket;

    public static void main(String[] args) {
        Server server = new Server();
        server.initializeServer();
        System.out.println("Server initialized");
        server.listenConnections();
    }

    private void initializeServer() {
        try {
            db = DriverManager.getConnection("jdbc:mysql://localhost:3306/courseworkschema" +
                            "?verifyServerCertificate=false" +
                            "&useSSL=false" +
                            "&requireSSL=false" +
                            "&useLegacyDatetimeCode=false" +
                            "&amp" +
                            "&serverTimezone=UTC",
                    "Sergei",
                    "12345");
            statement = db.createStatement();
            socket = new ServerSocket(1024);
        } catch (SQLException | IOException e) {
            e.printStackTrace();
        }
    }

    private void listenConnections() {
        System.out.println("Listening connections ... ");
        while (true) {
            try {
                Socket client = socket.accept();
                new Thread(() -> {
                    System.out.println("Client accepted");
                    try {
                        OutputStream outputStream = client.getOutputStream();
                        InputStream inputStream = client.getInputStream();

                        String clientAction;
                        String queryContent;

                        boolean flag = true;

                        while (flag) {
                            byte[] msg = new byte[100];
                            int k = inputStream.read(msg);
                            clientAction = new String(msg, 0, k);
                            clientAction = clientAction.trim();
                            msg = new byte[100];
                            k = inputStream.read(msg);
                            queryContent = new String(msg, 0, k);
                            queryContent = queryContent.trim();
                            System.out.println(clientAction);
                            System.out.println(queryContent);

                            if (clientAction.equalsIgnoreCase("END")) {
                                flag = false;
                            }
                            else if (clientAction.equalsIgnoreCase("LOGIN")) {
                                System.out.println("Login action");
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

创建此服务器是为了与数据库通信。这是我尝试连接到此服务器的方式L

public class LoginController {
    private LoginWindow window;
    private Socket socket;
    private InputStream is;
    private OutputStream os;

    public LoginController() {
        connectToServer();
    }

    public void logInUser(String login, String password) {
        if (!login.isEmpty() && !password.isEmpty()) {
            sendDataToServer("LOGIN");
            sendDataToServer("");
        } else {
            window.showMessageDialog("Fill the fields!", JOptionPane.ERROR_MESSAGE);
        }
    }

    public void attachView(LoginWindow window) {
        this.window = window;
    }

    private void connectToServer() {
        try {
            socket = new Socket("127.0.0.1", 1024);
            System.out.println("Connected");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void sendDataToServer(String res) {
        try {
            os = socket.getOutputStream();
            os.write(res.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

当我运行服务器然后是客户端时,我在服务器中有这样的日志:

Server initialized
Listening connections ... 

Process finished with exit code -1

所以,我无法理解为什么服务器不等待并接受来自客户端的连接,而是在初始化和监听后关闭。那么,怎么回事?我将不胜感激任何帮助。提前致谢!

UPD

当我 运行 我的应用程序开始工作时,我发现 Thread 块中的代码未执行。我也想不明白,为什么会这样

在您的 private void listenConnections() 中,您正在创建一个 Thread 对象,但您没有告诉它在创建后启动,因此它不会执行。

您的线程创建行应如下所示:

new Thread(() -> {
  //your code
}).start();

来自 javadocs: https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#start()

public void start()

Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread. The result is that two threads are running concurrently: the current thread (which returns from the call to the start method) and the other thread (which executes its run method).

It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.

Throws: IllegalThreadStateException - if the thread was already started.

See Also: run(), stop()