Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java单线程类对象_Java_Multithreading_Singleton - Fatal编程技术网

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