Java Singleton Thread类对象

时间:2019-06-19 11:13:37

标签: 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;
    }

    @Override
    public void run() {
      // some stuff
    }
}

这是课堂正在按预期方式进行。但我想将此课程作为单例课程。基本上,此类由多个项目通过其jar文件使用。此类的参数是特定于项目的。但是,根据业务逻辑,如果它们具有此类的多个实例,则没有意义。所以我正在考虑将其作为单例。这样它们就不能为此类创建多个对象。有人可以告诉我该怎么做吗?

2 个答案:

答案 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方法后,还必须释放锁,以确保在运行时崩溃而没有释放锁的情况下正确清理。