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

Java 如何管理不间断运行的线程,java,multithreading,concurrency,thread-safety,java-6,Java,Multithreading,Concurrency,Thread Safety,Java 6,我正在开发一款软件,该软件应能保持n个线程连续运行,因此我决定实现我能想到的最简单的解决方案:我的每个线程都定义在一个实现Runnable的类上,并在主函数中启动所有线程。 最近,我发现我的一个线程没有启动,所以我认为我的代码根本不安全 这是我的一个runnables示例: public类ExRunnable实现Runnable{ @凌驾 公开募捐{ 打印日志(“ExRunnable已启动…”); 试一试{ while(true){ ... } }捕获(例外情况除外){ 例如printStack

我正在开发一款软件,该软件应能保持n个线程连续运行,因此我决定实现我能想到的最简单的解决方案:我的每个线程都定义在一个实现Runnable的类上,并在主函数中启动所有线程。
最近,我发现我的一个线程没有启动,所以我认为我的代码根本不安全

这是我的一个runnables示例:

public类ExRunnable实现Runnable{
@凌驾
公开募捐{
打印日志(“ExRunnable已启动…”);
试一试{
while(true){
...
}
}捕获(例外情况除外){
例如printStackTrace();
}
}
}
主要是这样开始的:

publicstaticvoidmain(字符串[]args){
if(readConfigurationData()){
线程exThread=新线程(newexrunnable());
exThread.start();
...
}
其他的
打印日志(“无效的配置数据!”);
}
我在主函数中启动了大约12个线程,其中只有一个似乎没有启动。 我想知道的是,我的方法是否确实不安全,以及您是否可以为我提供一个更安全的模板


多谢各位

您试图实现的是一个线程池。为什么不使用java附带的一些已经存在的线程池实现呢

例如,下面是一些示例代码,其中包含5个线程的线程池,并每1秒安排一个线程:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
ScheduledFuture<?> future = executor.scheduleAtFixedRate(() -> {
System.out.println("Thread running");
}, 0, 1000, TimeUnit.MILLISECONDS);
ScheduledExecutorService executor=Executors.newScheduledThreadPool(5);
ScheduledFuture future=executor.scheduleAtFixedRate(()->{
System.out.println(“线程运行”);
},0,1000,时间单位为毫秒);

更多信息请参见

如何判断线程未启动?你的代码看起来不错。我调用了一个函数printLog,它应该将一个日志打印到一个文件中,而这个日志没有打印出来。我100%肯定该函数工作正常。在
exThread.start()
之前添加日志记录以确保启动线程。是什么原因导致它无法启动?你确定你的
printLog
是线程安全的吗?我想这样实现它,但我没有发现Java SE 6的任何简单方法。这些类是在Java 1.5中添加的,所以它们肯定会出现在JavaSE6.Ok中。我会试试你的建议。非常感谢。