我正在开发一款应使n个线程连续运行的软件,因此我决定实现我能想到的最简单的解决方案:我的每个线程都在实现Runnable的类上定义,并且在主线程中功能我全部开始。
最近,我发现我的一个线程无法启动,因此我认为我的代码根本不安全。
这是我的一个可运行物品的一个例子:
public class ExRunnable implements Runnable {
@Override
public void run() {
printLog("ExRunnable started...");
try {
while (true) {
...
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
而且,这是从main开始的方式:
public static void main(String[] args) {
if (readConfigurationData()) {
Thread exThread = new Thread(new ExRunnable());
exThread.start();
...
}
else
printLog("Invalid configuration data!");
}
我的主函数中正在启动大约12个线程,而其中只有一个似乎没有启动。 我想知道的是,我的方法是否确实不安全,以及是否可以为我提供更安全的模板。
非常感谢您!
答案 0 :(得分:-1)
您要实现的是线程池。为什么不使用Java随附的一些现有线程池实现?
例如,以下示例代码具有5个线程的线程池并每1秒调度一个线程:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
ScheduledFuture<?> future = executor.scheduleAtFixedRate(() -> {
System.out.println("Thread running");
}, 0, 1000, TimeUnit.MILLISECONDS);
中的更多信息