Невозможно изменить скорость увеличения переменной

#java

#java

Вопрос:

У меня есть класс, представляющий различные ресурсы на планете. При создании экземпляра объекта из класса объект должен увеличивать количество ресурсов с постоянной скоростью. Скорость производства хранится в переменной и может быть изменена. Я ожидаю, что при изменении скорости производства фактическая скорость, с которой производятся ресурсы, должна измениться. Вот мой класс ресурсов:

 public class PlanetResources implements ResourceObserver {
    
    //baseProducingRate;
    private final int SECONDSINHOUR =3600;
    private final int mmBaseProducingRate =20;
    private final int cBaseProducingRate = 15;
    private final int dBaseProducingRate = 13;
    private final int vBaseProducingRate = 15;
    
    
    //Amount of resources of each type
    private int metallicMicrolattice;
    private int energy;
    private int carbyne;
    private int deuterium; 
    private int vibranium;
    
    //Resources Producing rate
    private int mmProducingRate=this.mmBaseProducingRate;
    private int cProducingRate= this.cBaseProducingRate;
    private int dProducingRate = this.dBaseProducingRate;
    private int vProducingRate = this.vBaseProducingRate;

    
    
    
    public PlanetResources(int mm, int e, int c, int d, int v) {
        super();
        this.metallicMicrolattice = mm;
        this.energy = e;
        this.carbyne = c;
        this.deuterium = d;
        this.vibranium = v;
        
        int delay=2000;

          Timer timer = new Timer();
          timer.scheduleAtFixedRate(new TimerTask()
              {
                  public void run()
                  {
                      metallicMicrolattice  ;
    
                  }
              }, delay, this.SECONDSINHOUR*1000/this.getMmProducingRate());
          
          
        timer.scheduleAtFixedRate(new TimerTask()
        {
            public void run()
            {
                carbyne  ;
            }
        }, delay, this.SECONDSINHOUR*1000/this.cProducingRate);
}
  

Вот мои тестовые коды:

 public static void main(String args[]) throws InterruptedException
    {
        PlanetResources thePlanetResource = new PlanetResources(0, 0, 0, 0, 0);
                
        
        Scanner keyboard= new Scanner(System.in);
    while(true)
    {
        System.out.println("Welcome, What would you like to do ?");
        System.out.println("1) visit ship Yard");
        System.out.println("2) visit mines");
        System.out.println("3) manage fleet");
        System.out.println("4) explore galaxy");
        System.out.println("5) exit");
         
        int option = keyboard.nextInt();
        
        if (option==2)
        {
            System.out.println("Here are your current resources:");
            System.out.println(thePlanetResource);
            Thread.sleep(10000);
            System.out.println(thePlanetResource);
            thePlanetResource.setMmProducingRate(10000);
            
        }
        
    }
  

Когда я запустил его, я получаю:

введите описание изображения здесь

Значение metallicMicrollatice должно увеличиваться намного быстрее после того, как я выберу 2 вторых раза (10000 / часов) в предоставленных параметрах. Но он по-прежнему выдавал только 1 через 10 секунд.

Комментарии:

1. В многопоточных системах вы должны использовать AtomicInteger для переменных вместо int , используемых более чем в одном потоке (например, основной поток и поток таймера) вместо int. В противном случае вы можете столкнуться с проблемами.