Jim*_*mmy 5 java multithreading thread-safety
作为我当前应用程序的补充,我需要创建一个单独的线程,它将定期进行一些处理
我创建了一个新类来完成所有这些,这个类将在我的应用程序启动时加载.
这是我到目前为止:
public class PeriodicChecker extends Thread
{
static
{
Thread t = new Thread(new PeriodicChecker());
while(true)
{
t.run();
try
{
Thread.sleep(5000l);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
/**
* Private constructor to prevent instantiation
*/
private PeriodicChecker()
{
}
@Override
public void run()
{
System.out.println("Thread is doing something");
// Actual business logic here, that is repeated
}
}
Run Code Online (Sandbox Code Playgroud)
我想使构造函数私有,以防止其他人试图意外地实例化这个类.我怎样才能做到这一点?
另外,我对这些要求的实施有什么不好吗?我只创建一个会运行然后睡觉的线程,我是否错过了任何明显的错误?我之前没有使用过线程
sjl*_*lee 12
Java提供ScheduledExecutorService来计划和运行具有延迟的周期性任务或任务.它应该提供您需要的所有功能.Timer是另一个提供类似功能的类,但我建议使用ScheduledExecutorService over Timer,因为它具有灵活的配置和更好的错误管理.
gre*_*uze 10
您的代码中有一些概念错误...例如:
你应该阅读一些关于线程的例子,一开始就有点难以解决,你很容易产生不良影响.
这是一个小例子,可能会做你想要的类似的事情:
public class PeriodicChecker extends Thread
{
@Override
public void run()
{
while(true) {
System.out.println("Thread is doing something");
Thread.sleep(5000);
}
}
}
public OtherClass {
public static void main(String args[]) {
Thread t = new PeriodicChecker();
t.start();
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想要没有人可以创建一个新的线程,你可以创建一个单例,所以你将确保没有人创建更多的线程.