import java.util.concurrent.*;import java.util.*;public class TestGreenhouseScheduler { 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) { //scheduleAtFixedRate 定时执行一次任务,是重复执行 scheduler.scheduleAtFixedRate(event, initialDelay, period, TimeUnit.MILLISECONDS); } class LightOn implements Runnable { int j=0; public void run() { // Put hardware control code here to // physically turn on the light. System.out.println("Turning on lights"+"执行了"+(j++)); light = true; } } class LightOff implements Runnable { public void run() { // Put hardware control code here to // physically turn off the light. System.out.println("Turning off lights"); light = false; } } class WaterOn implements Runnable { public void run() { // Put hardware control code here. System.out.println("Turning greenhouse water on"); water = true; } } class WaterOff implements Runnable { public void run() { // Put hardware control code here. System.out.println("Turning greenhouse water off"); water = false; } } class ThermostatNight implements Runnable { int j=0; public void run() { // Put hardware control code here. System.out.println("Thermostat to night setting"+"执行了"+(j++)); setThermostat("Night"); } } class ThermostatDay implements Runnable { public void run() { // Put hardware control code here. System.out.println("Thermostat to day setting"); setThermostat("Day"); } } class Bell implements Runnable { int j= 0; public void run() { System.out.println("Bing!"+"执行了"+(j++)); } } class Terminate implements Runnable { public void run() { System.out.println("Terminating"); scheduler.shutdownNow(); //结束线程 // Must start a separate task to do this job, // since the scheduler has been shut down: new Thread() { public void run() { //最后一次执行 System.out.println("nowww"); } }.start(); } } public static void main(String[] args) { TestGreenhouseScheduler gh = new TestGreenhouseScheduler(); gh.schedule(gh.new Terminate(), 1000*7); //7秒运行一次任务,这里只执行一次 gh.repeat(gh.new Bell(), 0, 1000);//1秒执行一次任务,是重复执行 gh.repeat(gh.new ThermostatNight(), 0, 2000); gh.repeat(gh.new LightOn(), 0, 3000); }} ---结果7秒之后,结束所有的线程,你看Bing执行了7次---Bing!执行了0Thermostat to night setting执行了0Turning on lights执行了0Bing!执行了1Thermostat to night setting执行了1Bing!执行了2Bing!执行了3Turning on lights执行了1Bing!执行了4Thermostat to night setting执行了2Bing!执行了5Bing!执行了6Thermostat to night setting执行了3Turning on lights执行了2TerminatingBing!执行了7nowww ScheduledThreadPoolExecutor 定时重复执行任务
原文:http://www.cnblogs.com/xiongjianjunjava/p/4343646.html