1

私にはやるべき仕事があり、少し立ち往生しています。4 つのサービス (A、B、C、D) を作成する必要があります。すべてのサービスには独自のスレッドが必要です。それらは順番に開始して実行する必要があります。サービス A が開始した場合はサービス B を開始でき、サービス B が開始した場合はサービス C が開始した場合はサービス D を開始できます。 PriorityService クラスで。サービス(スレッド)Aが生きているかどうかを確認したいのですが、生きている場合はリストから2番目のサービスに移動したいなどです。それは可能ですか?サービスの依存関係を記述する方法について他にアイデアはありますか? どんなアドバイスも役に立ちます。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);     

    }
}
4

2 に答える 2

0

サービスごとに異なるスレッドを作成している場合、実行をスレッドで制御することはできません (たとえば、優先度を設定するなど)。優先度は OS の指標にすぎませんが、優先度の高いスレッドが最初に実行されるとは限りません。

待機、通知、結合などを使用したスレッド間通信によってこれを行うことができる唯一の方法です。

ただし、解決策が考えられる場合に備えて、サービスA、B、C、およびDの1つの組み合わせに対して個別のスレッドを作成すると思います.

于 2013-06-17T14:43:47.920 に答える