如何管理不间断运行的线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何管理不间断运行的线程相关的知识,希望对你有一定的参考价值。

我正在研究一个应该让n个线程连续运行的软件,所以我决定实现我能想到的最简单的解决方案:我的每个线程都是在一个实现Runnable的类上定义的,在main函数中我启动他们都是。 最近,我发现我的一个线程没有启动,所以我认为我的代码根本不安全。

这是我的一个runnables的一个例子:

public class ExRunnable implements Runnable {

    @Override
    public void run() {
        printLog("ExRunnable started...");
        try {
            while (true) {
                ...
            }
        } catch(Exception ex) {
            ex.printStackTrace();
        }
    }
}

而且,这是它从主要开始的方式:

public static void main(String[] args) {
        if (readConfigurationData()) {

            Thread exThread = new Thread(new ExRunnable());
            exThread.start();

            ...
        }
        else
            printLog("Invalid configuration data!");
    }

我在我的main函数中开始大约12个线程,其中只有一个似乎无法启动。我想知道的是,如果我的方法确实不安全,并且你可以为我提供更安全的模板。

非常感谢你!

答案

您要实现的是线程池。为什么不使用java附带的一些现有的线程池实现?

例如,下面是一些示例代码,它包含5个线程的线程池并每1秒调度一个线程:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
ScheduledFuture<?> future = executor.scheduleAtFixedRate(() -> {
System.out.println("Thread running");
}, 0, 1000, TimeUnit.MILLISECONDS);

更多信息在JavaDoc

以上是关于如何管理不间断运行的线程的主要内容,如果未能解决你的问题,请参考以下文章

不间断运行服务 - Thread,AsyncTask还是Executor?

Python 多线程爬虫

不间断的 cronjob

什么是线程,如何查看线程

多个用户访问同一段代码

CentOS 不间断会话(ssh关闭后如何保证程序继续运行)(nohup和screen)