创建、启动和管理长 运行 线程的最简洁方法是什么?

What is the cleanest way to create, start, and manage long-running threads?

线程在代码中添加了很多文字,使其更难理解和推理。例如看这段代码:

public class ConnectionListener implements Runnable {
            
    private Thread thread;
    private boolean running;
    
    public void start() {
        if (!running) {
            thread = new Thread(this);
            thread.start();
        }
    }
    
    public void stop() {
        if (running) {
            running = false;
            thread.interrupt();
        }
    }
    
    @Override
    public void run() {
        running = true;
        
        while (running) {
            // Do some crap
        }
    }
    
}

这个 class 的全部关注点应该是侦听来自网络的连接请求。但是看看为管理线程添加了多少行代码。有什么办法可以使这段代码更干净吗?!我不想看到 thread = new Thread();,不是线程变量,也不是任何 stop()/start() 方法!

我当然知道ExecutorService是什么...但是如果我想管理一个长运行线程怎么办? long-运行线程是指生命周期与应用程序生命周期一样长的线程。

你有什么好的解决办法吗?一种从 class 中删除线程创建和管理问题而不使 class 扩展另一个 class?

的方法

我使用单线程执行器服务解决了这个问题。我还阅读了 Plain ThreadThreadPoolSingleThreadExecutor - .

之间的性能差异

使用单线程执行器允许我启动一个线程并使用其 Future 管理它。参见代码示例:

public void func(String[] args) {
   ExecutorService es = Executors.newSingleThreadExecutor();
   Future<?> f = es.submit(Some Runnable);
}

感谢@BasilBourque 在评论中为我提供了这个解决方案。