run()方法和其他类方法(java线程)之间的通信
我有任务要做,我有点困了。我必须做4个服务A,B,C,D。每个服务都应该有自己的线程。它们应该按顺序启动并运行。如果服务A启动,那么可以启动服务B,如果服务B启动,如果服务C启动,那么可以启动服务D。我设法创建服务及其线程,但我不知道如何在PriorityService类中的start和priority方法之间创建通信。我想检查servicethread A是否处于活动状态,是否处于活动状态,我想从列表中移动到第二个服务,依此类推。可能吗?您对如何编写服务依赖项还有其他想法吗? 任何建议都是有用的。Tnx 这是我的密码:run()方法和其他类方法(java线程)之间的通信,java,multithreading,list,methods,Java,Multithreading,List,Methods,我有任务要做,我有点困了。我必须做4个服务A,B,C,D。每个服务都应该有自己的线程。它们应该按顺序启动并运行。如果服务A启动,那么可以启动服务B,如果服务B启动,如果服务C启动,那么可以启动服务D。我设法创建服务及其线程,但我不知道如何在PriorityService类中的start和priority方法之间创建通信。我想检查servicethread A是否处于活动状态,是否处于活动状态,我想从列表中移动到第二个服务,依此类推。可能吗?您对如何编写服务依赖项还有其他想法吗? 任何建议都是有用
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);
}
}
如果为每个服务创建不同的线程,则无法控制线程的执行,例如通过设置其优先级等。优先级只是操作系统的一个指标,但不能保证优先级较高的线程首先运行 唯一的方法是使用wait、notify、join等进行线程间通信
但我认为,如果您认为解决方案可能是,为服务A、B、C和D的一个组合创建单独的线程。您应该为此使用闩锁 您可以为每对线程使用两个闩锁,这应该可以完成您的工作。因此,线程A和B将有一个闩锁,这意味着直到它们都启动并运行,它们才能继续。C和D也是如此
这有一个示例显示了闩锁的使用,请看一看。在CreateThread的构造函数中读取-i=numb似乎是错误的,不应该是另一种方式吗?在当前线程上调用join不会有任何作用。代码的平静仍然存在,因为我试图将int I从while循环发送到CreateThread类,然后如果该线程处于活动状态,do I++会在run方法中变得麻木,并在priority方法中发送到while循环。我不知道这是不是一个好主意,因为我是编程新手。@seling with join方法我正在尝试运行所有线程而不弯腰。正如我所说,我不知道这是否是个好主意:我很困惑…调用Thread.currentThread.join;将一直挂到线程中断,这可能不是你想要的。我很好地理解你了吗,你认为我应该分别为服务创建线程,然后将它们传递给服务,然后在优先级方法中,我应该控制对每个服务的run方法的调用吗?我要说的是重新设计,使服务a、B、C、D在一个线程中串行执行。为这样的执行创建许多线程。