[英]communication between run() method and other class method (java threads)
我有任务要做,我有点受阻。 我必须提供4个服务(A,B,C,D)。 每个服务都应该有自己的线程。 它们应按顺序启动并运行。 如果服务A启动则可以启动服务B,如果服务B启动如果服务C启动则可以启动服务D。我设法创建服务及其线程,但是我不知道如何在start()和priority()方法之间创建通信在PriorityService类中。 我想检查service(thread)A是否仍在运行,是否要从列表移至第二个服务,依此类推。 那可能吗? 您还有其他想法如何编写服务依赖项吗? 任何建议都是有用的。 Tnx。
这是我的代码:
import java.util.*;
class CreateThread extends Thread{
private String thread_name;
public int numb;
public CreateThread(String thread_name, int i){
this.thread_name=thread_name;
System.out.println("Thread " + thread_name + " has started.");
i=numb;
}
public void run(){
try{
Thread t = Thread.currentThread();
System.out.println(thread_name + " status = " + t.getState());
System.out.println(thread_name + " status = " + t.isAlive());
t.join();
}catch(Exception e){
System.out.println(e);
}
}
}
class PriorityService extends ArrayList<Service> {
public void priority()
{
int i=0;
while(i<size()){
System.out.println("evo me"+ get(i).service_name);
if(get(i).service_name=="Service A")
get(i).StartService(get(i).service_name, get(i).thread_name, i);
i++;
}
}
}
public class Service {
public String service_name;
public String thread_name;
public Service(String service_name, String thread_name){
this.service_name=service_name;
this.thread_name=thread_name;
}
public void StartService(String service_name, String thread_name, int i) {
System.out.println("Service " + service_name + " has started.");
Thread t=new Thread(new CreateThread(thread_name, i));
t.start();
}
public void StopService() {}
public static void main (String[] args){
PriorityService p_s=new PriorityService();
Service service_A = new Service("Service A", "Thread A");
Service service_B = new Service("Service B", "Thread B");
Service service_C = new Service("Service C", "Thread C");
Service service_D = new Service("Service D", "Thread D");
p_s.add(service_A);
p_s.add(service_B);
p_s.add(service_C);
p_s.add(service_D);
p_s.priority();
for(Service s: p_s)
System.out.println(s.service_name);
}
}
如果为每个服务创建不同的线程,则无法控制线程的执行(例如,通过设置其优先级等)。 优先级仅是操作系统的指标,但不能保证优先级更高的线程先运行。
您只能通过使用等待,通知,联接等的线程间通信来做到这一点。
但是我认为,如果解决方案可能是,请为服务A,B,C和D的一种组合创建单独的线程。
您应该为此使用闩锁。
您可以为每对线程使用2个闩锁,这应该可以完成您的工作。 因此,线程A和线程B将存在一个闩锁,这意味着直到它们两个都启动并运行之后,它们才能继续进行。 对于C和D同样如此。
该链接有一个示例显示Latch的用法,请看一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.