Java 单例线程 class 对象
Java Singleton Thread class object
我有一个class如下
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
}
}
这是 class 正在按预期进行工作。但我想把这个 class 设为单例 class。基本上这个 class 通过它的 jar 文件被多个项目使用。此 class 的参数是特定于项目的。但是,如果根据业务逻辑他们有多个 class 实例,那将毫无意义。所以我想把它做成单身人士。这样他们就不能为此 class 创建多个对象。有人可以告诉我该怎么做吗?
您可以使用标准的单例模式。在 createInstance 方法中,如果它不可用,您可以尝试获取锁 createInstance 可以抛出异常 else return the object
Lock lock = ...;
public JobInstance createInstance()
{
if (lock.tryLock()) {
//Create instance of your object here
} else {
// throw object already exist exception
}
}
当 运行 方法在 finalize 中完成时,您必须释放锁,以确保在 运行 崩溃而未释放锁的情况下正确清理。
您可以按照单例class规则使其成为单例class。
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;
}
}
我有一个class如下
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
}
}
这是 class 正在按预期进行工作。但我想把这个 class 设为单例 class。基本上这个 class 通过它的 jar 文件被多个项目使用。此 class 的参数是特定于项目的。但是,如果根据业务逻辑他们有多个 class 实例,那将毫无意义。所以我想把它做成单身人士。这样他们就不能为此 class 创建多个对象。有人可以告诉我该怎么做吗?
您可以使用标准的单例模式。在 createInstance 方法中,如果它不可用,您可以尝试获取锁 createInstance 可以抛出异常 else return the object
Lock lock = ...;
public JobInstance createInstance()
{
if (lock.tryLock()) {
//Create instance of your object here
} else {
// throw object already exist exception
}
}
当 运行 方法在 finalize 中完成时,您必须释放锁,以确保在 运行 崩溃而未释放锁的情况下正确清理。
您可以按照单例class规则使其成为单例class。
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;
}
}