Ver código fonte

修改路灯服务,使用阻塞等待,确保 BufferedReader 和 BufferedWriter 在 ExecutionServer 初始化时已经准备好,并且避免在启动时因未初始化而抛出异常

邵洋 1 ano atrás
pai
commit
0e0ee1331d

+ 4 - 0
lamp-service/src/main/java/com/zksy/lamp/server/ExecutionServer.java

@@ -23,6 +23,8 @@ public class ExecutionServer {
     @PostConstruct
     public void init() {
         try {
+            // 等待 TcpServer 初始化完成
+            tcpServer.awaitInitialization();
             reader = tcpServer.getReader();
             writer = tcpServer.getWriter();
             if (reader == null || writer == null) {
@@ -31,6 +33,8 @@ public class ExecutionServer {
             System.out.println("Reader and Writer initialized successfully.");
         } catch (IOException e) {
             e.printStackTrace();
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
         }
     }
 

+ 11 - 1
lamp-service/src/main/java/com/zksy/lamp/server/TcpServer.java

@@ -17,6 +17,8 @@ public class TcpServer {
     private Socket client;
     private int serverPort = 15678;
 
+    private final Object lock = new Object();
+
     @PostConstruct
     public void init(){
         Runnable func0 = this::startServer;
@@ -55,7 +57,9 @@ public class TcpServer {
 
             reader = new BufferedReader(new InputStreamReader(client.getInputStream(), "GB2312"));
             writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(), "GB2312"));
-
+            synchronized (lock) {
+                lock.notify(); // 通知等待的线程
+            }
             System.out.println("测试完成!");
 
         } catch (IOException e) {
@@ -69,4 +73,10 @@ public class TcpServer {
     public synchronized BufferedWriter getWriter() {
         return this.writer;
     }
+
+    public void awaitInitialization() throws InterruptedException {
+        synchronized (lock) {
+            lock.wait(); // 阻塞当前线程,直到有通知
+        }
+    }
 }