У меня есть задача сделать, и я немного застрял. Я должен сделать 4 услуги (A, B, C, D). У каждого сервиса должна быть своя нить. Они должны начинаться последовательно и запускаться. Если служба A запускается, тогда можно запустить службу B, если служба B запускается, если запускается служба C, тогда можно запустить службу D. Мне удается создать службу и их потоки, но я не знаю, как мне создать связь между методом start() и priority() в классе PriorityService. Я хочу проверить, жив ли сервис (поток) A, и хочу ли я перейти к второй службе из списка и так далее. Это возможно? Есть ли у вас какие-либо другие идеи, как писать зависимость от службы? Любой совет полезен. Tnx.связь между методом run() и другим методом класса (потоки java)
Вот мой код:
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);
}
}
Чтение - 'i = numb' в конструкторе' CreateThread' кажется неправильным, не должно быть наоборот? – selig
Вызов 'join' в текущем потоке ничего не сделает. – selig
, что мир кода остался там, потому что я пытался отправить int i из цикла while в класс CreateThread, а затем, если этот поток жив, i ++ witch становится numb в методе run() и отправляет его методу while в методе priority(). Я не знаю, хорошая ли это идея, потому что я новичок в программировании. – njamanjam