Java单线程类对象
我有如下的课程Java单线程类对象,java,multithreading,singleton,Java,Multithreading,Singleton,我有如下的课程 public class JobThread implements Runnable { private JobService jobService; private long interval; public JobThread(JobService jobService, long interval) { this.jobService = jobService; this.interval = interval;
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文件被多个项目使用。此类的参数是特定于项目的。但是,如果按照业务逻辑,它们有这个类的多个实例,那么这是没有意义的。所以我想把它做成单身汉。这样他们就不能为这个类创建多个对象。有人能告诉我怎么做吗?你可以使用标准的单例模式。在createInstance方法中,如果锁不可用,可以尝试获取锁createInstance可以抛出异常,否则返回对象
Lock lock = ...;
public JobInstance createInstance()
{
if (lock.tryLock()) {
//Create instance of your object here
} else {
// throw object already exist exception
}
}
在finalize中完成run方法时,您必须释放锁,以确保在run崩溃时正确清理,而不释放锁。您可以按照单例类规则将其设置为单例类
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;
}
}
您是否试图在许多不同的项目中使用相同的单例?不,每个项目使用一个单例。JAR的多个副本意味着多个单例类。不需要
getInstance()
中的参数。这些值是静态的
,因此最好在不使用参数的情况下创建,并添加setter
s