From 0e4b212f99dc86dfb699b6cd512e77250b0f2135 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Tue, 11 Feb 2025 12:57:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=B2=D0=B5=D0=BD=D1=82=D0=B8?= =?UTF-8?q?=D0=BB=D1=8F=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/spbstu/telematics/java/Fan.java | 28 +++++++++++++++++-- .../java/ru/spbstu/telematics/java/Room.java | 4 +++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lab3/src/main/java/ru/spbstu/telematics/java/Fan.java b/lab3/src/main/java/ru/spbstu/telematics/java/Fan.java index 866a56b..cec9711 100644 --- a/lab3/src/main/java/ru/spbstu/telematics/java/Fan.java +++ b/lab3/src/main/java/ru/spbstu/telematics/java/Fan.java @@ -1,15 +1,39 @@ package ru.spbstu.telematics.java; +import java.util.Random; + /* * Симулирует вентилятор, установленный в комнате. Может изменять поля комнаты, * а именно - уменьшать влажность в ней. */ public class Fan implements Runnable { - Room room; - private boolean isOn; + private Room room; + + public Fan(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 humidityMaxStep = 1; + private long maxStepTimeMs = 3000; @Override public void run() { + while (!Thread.interrupted()) { + if (isOn) + room.adjustHumidity(-random.nextDouble() * humidityMaxStep); + Utils.sleepRandomTime((long) (maxStepTimeMs * 0.5), maxStepTimeMs); + } } } diff --git a/lab3/src/main/java/ru/spbstu/telematics/java/Room.java b/lab3/src/main/java/ru/spbstu/telematics/java/Room.java index 03812ca..59f334d 100644 --- a/lab3/src/main/java/ru/spbstu/telematics/java/Room.java +++ b/lab3/src/main/java/ru/spbstu/telematics/java/Room.java @@ -24,6 +24,10 @@ public class Room implements Runnable { return humidity; } + public synchronized void adjustHumidity(double delta) { + this.humidity += delta; + } + // Параметры произвольного изменения температуры и влажности в комнате private Random random = new Random(); private double temperatureMaxStep = 1;