0


我在我的 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();

      }
    }
} 
4

1 回答 1

1

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

class MyClass implements Runnable {

int id = -1;

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


public run() ...
//etc
}

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

于 2013-09-16T10:34:50.300 回答