下面是我的服务器套接字线程的run()
,它将作为Executors.newWorkStealingPool().submit(() -> mainServer.run());
运行并接受客户端连接。它运行正常,但Sonar
抱怨它是Bug
类型的Loops should not be infinite (squid:S2189)
class MainServer { private final ServerSocket serverSocket; private final boolean checkClientCerts; private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(MainServer.class.getName()); private final int threadPoolSize; private boolean running; private ExecutorService executorService; MainServer(int port, boolean checkClientCerts, int threadPoolSize, InetAddress bindAddress) throws IOException { LOG.debug("Locating server socket factory for SSL..."); SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); LOG.debug("Creating a server socket on port " + port); SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(port, 0, bindAddress); this.checkClientCerts = checkClientCerts; this.threadPoolSize = threadPoolSize; } void run() { running = true; DefaultThreadFactory threadFactory = new DefaultThreadFactory("SSLHandshake"); executorService = new ShutdownThreadPoolExecutor(threadPoolSize,threadFactory); while (running) { Socket clientSocket; try { clientSocket = serverSocket.accept(); MainServerHandshakeThread handshakeThread = new MainServerHandshakeThread(clientSocket, this); executorService.submit(handshakeThread); } catch (IOException ex) { LOG.error("Error accepting connection",ex); } } } public void shutdown() { LOG.info("Stopping main server..."); running = false; try { if (serverSocket!=null) { serverSocket.close(); } } catch(IOException ex) { LOG.debug("Failed to close socket",ex); } executorService.shutdown(); try { if (!executorService.awaitTermination(500, TimeUnit.MILLISECONDS)) { executorService.shutdownNow(); } } catch (InterruptedException e) { executorService.shutdownNow(); } LOG.info("Main server stopped..."); } }
有人可以帮我如何优化上面的代码块,以消除声纳的投诉?
下面是我的服务器套接字线程的run(),它将作为Executors.newWorkStealingPool()。submit(()-> mainServer.run())运行;并接受客户端连接。它运行正常,但是声纳是...
[将您的running
标记为volatile
。