我的课程如下
public class JobThread implements Runnable {
private JobService jobService;
private long interval;
public JobThread(JobService jobService, long interval) {
this.jobService = jobService;
this.interval = interval;
}
@Override
public void run() {
// some stuff
}
}
这是课堂正在按预期方式进行。但我想将此课程作为单例课程。基本上,此类由多个项目通过其jar文件使用。此类的参数是特定于项目的。但是,根据业务逻辑,如果它们具有此类的多个实例,则没有意义。所以我正在考虑将其作为单例。这样它们就不能为此类创建多个对象。有人可以告诉我该怎么做吗?
答案 0 :(得分:1)
您可以遵循单例课程规则,使其成为单例课程。
public class JobThread implements Runnable
{
private static JobService jobService;
private static long interval;
private static JobThread myObj;
static
{
myObj = new JobThread ();
}
private JobThread ()
{
}
@Override public void run ()
{
//some stuff
}
public static JobThread getInstance (JobService jobService_p,
long interval_p)
{
jobService = jobService_p;
interval = interval_p;
return myObj;
}
}
答案 1 :(得分:0)
您可以使用标准的单例模式。在createInstance方法中,如果不可用,则可以尝试获取锁createInstance可以引发异常,否则返回对象
Lock lock = ...;
public JobInstance createInstance()
{
if (lock.tryLock()) {
//Create instance of your object here
} else {
// throw object already exist exception
}
}
在完成final方法后,还必须释放锁,以确保在运行时崩溃而没有释放锁的情况下正确清理。