ScheduledExecutorService_Periodic.java
/*
* Copyright@ 2011 www.egtry.com
*/
package egtry.thread;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorService_Periodic {
public static void main(String[] args) {
ScheduledExecutorService scheduler=Executors.newScheduledThreadPool(1);
Worker command=new Worker();
System.out.println("scheduling at: "+new Date());
scheduler.scheduleAtFixedRate(command, 0, 3, TimeUnit.SECONDS);
try {
Thread.sleep(10*1000);
scheduler.shutdown();
System.out.println("Shutdown at: "+new Date());
} catch (InterruptedException e) {
}
}
public static class Worker implements Runnable {
private static int counter=0;
public synchronized static int incr() {
counter++;
return counter;
}
public synchronized static int decr() {
counter--;
return counter;
}
@Override
public void run() {
long id=Thread.currentThread().getId();
System.out.println("Start Worker: "+id+" total="+incr()+" at: "+new Date());
try {
Thread.sleep((int) (Math.random()*3000));
} catch (InterruptedException e) {
}
System.out.println("End Workder: "+id+" total="+decr()+"at: "+new Date()+"\n");
}
}
}
Output
scheduling at: Mon Oct 03 11:25:59 CDT 2011
Start Worker: 8 total=1 at: Mon Oct 03 11:25:59 CDT 2011
End Workder: 8 total=0at: Mon Oct 03 11:26:00 CDT 2011
Start Worker: 8 total=1 at: Mon Oct 03 11:26:02 CDT 2011
End Workder: 8 total=0at: Mon Oct 03 11:26:03 CDT 2011
Start Worker: 8 total=1 at: Mon Oct 03 11:26:05 CDT 2011
End Workder: 8 total=0at: Mon Oct 03 11:26:07 CDT 2011
Start Worker: 8 total=1 at: Mon Oct 03 11:26:08 CDT 2011
Shutdown at: Mon Oct 03 11:26:09 CDT 2011
End Workder: 8 total=0at: Mon Oct 03 11:26:11 CDT 2011