gpt4 book ai didi

java - java 序列中的服务(线程)

转载 作者:行者123 更新时间:2023-12-01 18:52:02 26 4
gpt4 key购买 nike

我的任务是制作 3 个(A、B、C)相互依赖的服务。当服务A启动时,服务B可以启动,当服务B启动时,服务C可以启动,当服务C停止时,服务B可以停止,当服务B停止时,服务A可以停止。我已经设法启动线程并使用状态选项从一个线程切换到另一个线程。我不得不说,我对java了解不多,但我刚刚开始学习java,所以我对此很陌生,所以任何帮助、建议等都会很棒。

此外,我有 3 个几乎相同的类,所以有人可以告诉他们如何用一个类替换这 3 个类吗?有什么办法吗?

这是我的代码:

public class service_class {
int status=1;
public static void main(String[] args) {

service_class service_class = new service_class();

A1 a=new A1(service_class);
B1 b=new B1(service_class);
C1 c=new C1(service_class);

a.start();
b.start();
c.start();

}
}

class A1 extends Thread{
service_class service_class;

A1(service_class service_class){
this.service_class = service_class;
}


@Override
public void run() {

try{
synchronized (service_class) {
while(service_class.status!=1){
service_class.wait();
}

System.out.print("A started" + "\n");
service_class.status = 2;
service_class.notifyAll();

while(service_class.status!=7){
service_class.wait();
}
System.out.print("A stoped" + "\n");
service_class.status = 1;
service_class.notifyAll();
}

}catch (Exception e) {
System.out.println("Exception 1 :"+e.getMessage());
}

}

}

class B1 extends Thread{

service_class service_class;

B1(service_class service_class){
this.service_class = service_class;
}

@Override
public void run() {

try{
synchronized (service_class) {

while(service_class.status!=2){
service_class.wait();
}

System.out.print("B started " + "\n");
service_class.status = 4;
service_class.notifyAll();

while(service_class.status!=6){
service_class.wait();
}
System.out.print("B stoped" + "\n");
service_class.status = 7;
service_class.notifyAll();
}

}catch (Exception e) {
System.out.println("Exception 2 :"+e.getMessage());
}

}
}


class C1 extends Thread{

service_class service_class;

C1(service_class service_class){
this.service_class = service_class;
}

@Override
public void run() {

try{
synchronized (service_class) {
while(service_class.status!=4){
service_class.wait();
}
System.out.print("C started" + "\n");
service_class.status = 5;
service_class.notifyAll();

while(service_class.status!=5){
service_class.wait();
}
System.out.print("C stoped" + "\n");
service_class.status = 6;
service_class.notifyAll();
}
}catch (Exception e) {
System.out.println("Exception 4 :"+e.getMessage());
};

}
}

最佳答案

I have 3 almost the same classes so can anyone tell em how can I replace those 3 classes with one? Is there any way?

看起来 3 个类 ABC 之间的区别是:

  • 打印的名称字符串,以及
  • 每个人测试和设置的状态值。

因此,只需将它们替换为 final 实例变量,并使用传递给(统一)类构造函数的值来初始化它们。

<小时/>

但是...

扩展线程通常被认为是一个坏主意。首先,它使得使用线程池变得困难。更好的方法是使用标准 Thread 类,并在构造它时向其传递一个 Runnable 实例。事实上,如果您使用线程池或执行器服务或其他什么,您甚至不需要自己创建和管理线程。

对于等待/通知内容,使用更高级别的同步构造(例如CountDownLatch)会更容易。

关于java - java 序列中的服务(线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15547710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com