我在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();
}
}
}
答案 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
的所有正在运行的实例。希望你明白这一点。