我当前正在尝试创建服务器应用程序。经过测试,我发现代码停止在未知位置。下面显示的.as-console-wrapper { max-height: 100% !important; top: 0; }
方法中启动的线程确实会阻塞代码,但是据我所知,这是一个独立的过程,其他所有事物都将忽略它。
下面是启动我的服务器的方法:
start
以下方法是一种测试方法,其中我将public final void start (int port) throws IOException, Exception {
// Checks if the server has already been started.
if (!isStopped) throw new Exception("Attempted to start a server "
+ "twice.");
isStopped = false;
// Place the server in the socket.
serverSocket = new ServerSocket(port);
// Initializes the connection list
connections = new CopyOnWriteArrayList<>();
// Start the connection-handler thread
connectionHandler.start();
// Sends success message.
logStream.println("[MSG] Server started successfully on port " + port
+ ".");
}
设置为logStream
。我看到了打印的消息,但是放置的断点没有跳动。
stdout
主线程在哪里阻塞?而且我是否缺少有关线程如何工作的重要信息?
编辑:我被要求为public static void main (String[] args) throws IOException, Exception {
Server server = new Server();
server.start(6333);
Input input = new Input(); // Breakpoint placed here
input.stringPrompt = "Press Enter to stop...";
input.getString(); // Normally blocks code for some time
server.stop();
}
添加一个最小的可复制示例。以下是我创建的connectionHandler
内部类的实现方法:
Runnable