Логика симуляции нагревателя
This commit is contained in:
@@ -1,15 +1,48 @@
|
|||||||
package ru.spbstu.telematics.java;
|
package ru.spbstu.telematics.java;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Симулирует нагреватель, установленный в комнате. Может изменять поля комнаты,
|
* Симулирует нагреватель, установленный в комнате. Может изменять поля комнаты,
|
||||||
* а именно - увеличивать температуру в ней.
|
* а именно - увеличивать температуру в ней.
|
||||||
*/
|
*/
|
||||||
public class Heater implements Runnable {
|
public class Heater implements Runnable {
|
||||||
Room room;
|
private Room room;
|
||||||
private boolean isOn;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
|
|
||||||
|
public Heater(Room room) {
|
||||||
|
this.room = room;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private volatile boolean isOn;
|
||||||
|
|
||||||
|
public void turnOn() {
|
||||||
|
this.isOn = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void turnOff() {
|
||||||
|
this.isOn = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Random random = new Random();
|
||||||
|
private double temperatureMaxStep = 1;
|
||||||
|
private long maxStepTimeMs = 3000;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while (!Thread.interrupted()) {
|
||||||
|
if (isOn) room.adjustTemperature(random.nextDouble() * temperatureMaxStep);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Thread.sleep(getStepTime());
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private long getStepTime() {
|
||||||
|
// Спим от 0.5 * maxStepTimeMs до maxSteTimeMs миллисекунд
|
||||||
|
return (long) (random.nextDouble() * 0.5 + 0.5) * maxStepTimeMs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ public class Room implements Runnable {
|
|||||||
return temperature;
|
return temperature;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void adjustTemperature(double delta) {
|
||||||
|
this.temperature += delta;
|
||||||
|
}
|
||||||
|
|
||||||
// Относительная влажность в процентах
|
// Относительная влажность в процентах
|
||||||
private volatile double humidity = 0.5;
|
private volatile double humidity = 0.5;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user