1

我有任务要做,我有点卡住了。我必须提供 4 项服务(A、B、C、D)。每个服务都应该有自己的线程。它们应该按顺序启动并运行。如果服务 A 启动,则可以启动服务 B,如果服务 B 启动,如果服务 C 启动,则可以启动服务 D。我设法创建服务及其线程,但我不知道应该如何在 start() 和 priority() 方法之间创建通信在 PriorityService 类中。我想检查服务(线程)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);     

    }
}
4

2 回答 2

0

如果您为每个服务创建不同的线程,那么您无法控制线程的执行(例如,通过设置其优先级等)。优先级只是操作系统的一个指标,不能保证优先级高的线程先运行。

只有通过使用等待、通知、加入等的线程间通信才能做到这一点。

但我认为,如果您的解决方案可能是,为服务 A、B、C 和 D 的一种组合创建单独的线程。

于 2013-06-17T14:43:47.920 回答
0

您应该为此使用闩锁。

您可以为每对线程使用 2 个闩锁,这应该可以完成您的工作。因此,线程 A 和 B 将有一个 Latch,这意味着直到它们都启动并运行它们才能继续。对于 C 和 D 也是如此。

链接有一个示例显示 Latch 的使用,请看一下。

于 2013-06-17T14:57:37.243 回答