通过线程名称java查找实例

时间:2013-09-16 10:18:36

标签: java multithreading get instance runnable


我在Controller类中启动了几个线程。 在开始每个线程之前,我想检查以前是否已启动MyClass run()。如果我已经开始,那么我需要找到正在运行的MyClass实例。因为其他一些类也希望从同一个MyClass实例中完成工作。 (假设MyClass作为服务运行。因此可以有多个请求进入。)

请注意,我有多个MyClass实例作为线程运行。所以我想通过特定线程名称(TH1或TH2)找到MyClass实例。

public class MyClass implements Runnable{
   public void run() { 
     .
     .
     .
   }
}

这是启动线程的类。

public class Controller {
    private void threadStarter(int i) {
      MyClass  mclss;
      if (i==1) {

         mclss  = new MyClass();
         Thread   th     = new Thread(mclss , "TH1");
         th.start();

      } else {

         mclss  = new MyClass();
         Thread   th2    = new Thread(mclss , "TH2");
         th2.start();

      }
    }
} 

1 个答案:

答案 0 :(得分:0)

Java线程的标识为http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#getId()。也许你可以利用它。但是,如果我的应用程序依赖于之前的实例,如果有的话,运行,那么我将在MyClass本身中拥有一个标识符,然后使用它。 e.g。

class MyClass implements Runnable {

int id = -1;

public synchronized int getId() {
 if(id == -1) {
 id = SomeSingleTon.getNextId();
 }
 return id;
}


public run() ...
//etc
}

然后在控制器类中,您可以检查当前正在运行的实例ID。也许您需要一个集合来存储MyClass的所有正在运行的实例。希望你明白这一点。