Java 继承和线程来修改超值

Java 继承和线程来修改超值,java,multithreading,Java,Multithreading,我的问题是,既然这是一个线程,我需要修改超类(gas)中的一些值,那么有没有办法在run方法中进行修改?据我所知,唯一的办法是做一个例子,但我不能在那里做 这样做的目的是在汽车行驶时降低燃油油位 同样,如果我尝试将一个Car对象写入一个文件,或者Car是需要从serializable扩展的对象,那么serializable实现也可以工作 这只是一个例子,我还有另一个名为Bus的类,它们都有不同的运行方法,只需保存一些代码,就可以修改代码,比如,非常抱歉格式不好 在vehicle类中引入fuel的

我的问题是,既然这是一个线程,我需要修改超类(gas)中的一些值,那么有没有办法在run方法中进行修改?据我所知,唯一的办法是做一个例子,但我不能在那里做

这样做的目的是在汽车行驶时降低燃油油位

同样,如果我尝试将一个Car对象写入一个文件,或者Car是需要从serializable扩展的对象,那么serializable实现也可以工作


这只是一个例子,我还有另一个名为Bus的类,它们都有不同的运行方法,只需保存一些代码,就可以修改代码,比如,非常抱歉格式不好

  • 在vehicle类中引入fuel的setter方法,并从子类run方法调用它

  • 如果不想在序列化对象时保留所有与线程相关的信息,可以考虑使vehicle类可运行

  • 为了序列化超级类实例变量,必须将Vehicle类标记为可序列化

    公共类车辆实现可序列化 { 私人燃料

    public class Vehicle extends Thread implements Serializable{
    
       private int gas; 
    
       public Vehicle(int gas){
           this.gas = gas;
       }
    }//Vehicle
    
    public class Car extends Vehicle{
    
       private int brakes;
    
       public Car(int fuel, int brakes){
           super(fuel)
           this.brakes = brakes;
       }
    
       @Override
       public void run(){
           //code here
       }
    }//Car
    
    }//车辆

    现在,汽车扩展了车辆,实现了可运行

    公共级轿车扩展了车辆的可运行性{

    私家车

       public Vehicle(int fuel){
           this.fuel = fuel;
       }
    
    protected void setFuel (int fuel){
        this.fuel = fuel;
    }
    
  • 在这个问题中,有一个关于序列化的简洁明了的解释


    您在Supery类中的变量是私有的,因此它对您的子类不可见。 如果您将其设置为受保护,则它将可见。因此您可以更改该值。
    还有一点,我建议为多线程可见性提供一个受保护的同步方法,并避免争用情况。如果它是线程上下文特定的,并且不是由多线程修改的,那么就不需要它。

    由于您扩展了Vehicle类,gas会自动继承,但由于它是私有成员,您可以实现getter-该变量的setter方法,或者将其作为公共变量。好吧,我理解它并且它工作了,我真的不知道这一点,现在的问题是关于可序列化的实现
    serializable
    有时被称为“标记接口”,只是说类是可序列化的。序列化要么是通过自动地,或者通过特定的私有方法(因此不是继承的)自定义实现序列化是微不足道的,并不是一种特别有用的方法来继承。您可能需要考虑使用<代码> Runnaby<代码>,而不是继承<代码>线程< /代码>。因为车辆可能实际上不是线程。对于序列化实现,您可以使用同步块。多次同时插入同步的{}块
       public Car(int fuel, int brakes){
           super(fuel)
           this.brakes = brakes;
       }
    
       @Override
       public void run(){
           //code here
           setFuel(fuel-1); // update the fuel value
       }
    }//Car