代码拉取完成,页面将自动刷新
package net.mindView.concurrency;
import java.util.*;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class GreenhouseScheduler {
private volatile boolean light = false;
private volatile boolean water = false;
private String thermostat = "Day";
//标志白天或黑夜
public synchronized String getThermostat(){
return thermostat;
}
public synchronized void setThermostat(String value){
thermostat = value;
}
ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(10);
public void schedule(Runnable event,long delay){
scheduler.schedule(event,delay, TimeUnit.MILLISECONDS);
}
public void repeat(Runnable event,long initialDelay,long period){
scheduler.scheduleAtFixedRate(event,initialDelay,period,TimeUnit.MILLISECONDS);
}
//事件
class LightOn implements Runnable{
public void run(){
System.out.println("Turning on lights");
light = true;
}
}
class LightOff implements Runnable{
public void run(){
System.out.println("Turning off lights");
light = false;
}
}
class WaterOn implements Runnable{
public void run(){
System.out.println("Turning greenhouse water on");
water = true;
}
}
class WaterOff implements Runnable{
public void run(){
System.out.println("Turning greenhouse water off");
water = false;
}
}
class ThermostatNight implements Runnable{
public void run(){
System.out.println("Thermostat to night setting");
setThermostat("Night");
}
}
class ThermostatDay implements Runnable{
public void run(){
System.out.println("Thermostat to day setting");
setThermostat("Day");
}
}
class Bell implements Runnable{
public void run(){
System.out.println("Bing!");
}
}
class Terminate implements Runnable{
public void run(){
System.out.println("Terminating");
scheduler.shutdownNow();
//打印收集到的数据
new Thread(){
public void run(){
for(DataPoint d: data)
System.out.println(d);
}
}.start();
}
}
//保存时间、温度、湿度
static class DataPoint{
final Calendar time; //时间
final float temperature; //温度
final float humidity; //湿度
public DataPoint(Calendar d,float temp,float hum){
time = d;
temperature = temp;
humidity = hum;
}
@Override
public String toString() {
return time.getTime() +
String.format(" temperature:%1$.1f humidity:%2$.2f",temperature,humidity);
}
}
private Calendar lastTime = Calendar.getInstance();
{
lastTime.set(Calendar.MINUTE,30); //调整日期为半个小时
lastTime.set(Calendar.SECOND,00);
}
private float lastTemp = 65.0f; //温度
private int tempDirection = +1; //温度的改变趋势
private float lastHumidity = 50.0f;
private int humidityDirection = +1;
private Random rand = new Random(47);
List<DataPoint> data = Collections.synchronizedList(
new ArrayList<DataPoint>());
class CollectData implements Runnable{
public void run(){
System.out.println("Collecting data");
synchronized (GreenhouseScheduler.this){
lastTime.set(Calendar.MINUTE,
lastTime.get(Calendar.MINUTE) + 30);
if(rand.nextInt(5) == 4){
tempDirection = -tempDirection;
}
lastTemp = lastTemp + tempDirection*(1.0f + rand.nextFloat());
if(rand.nextInt(5) == 4){
humidityDirection = -humidityDirection;
}
lastHumidity = lastHumidity + humidityDirection*rand.nextFloat();
data.add(new DataPoint((Calendar) lastTime.clone(),lastTemp,lastHumidity));
}
}
}
public static void main(String[] args) {
GreenhouseScheduler gh = new GreenhouseScheduler();
gh.schedule(gh.new Terminate(),5000); //设定结束的时间
gh.repeat(gh.new Bell(),0,1000);
gh.repeat(gh. new ThermostatNight(),0,2000);
gh.repeat(gh. new LightOn(),0,200);
gh.repeat(gh.new LightOff(),0,400);
gh.repeat(gh.new WaterOn(),0,600);
gh.repeat(gh.new WaterOff(),0,800);
gh.repeat(gh. new ThermostatDay(),0,1400);
gh.repeat(gh.new CollectData(),500,500);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。