package test.java.oo;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import com.google.common.util.concurrent.ListeningScheduledExecutorService;
import com.google.common.util.concurrent.MoreExecutors;

public class NonBlockingExcutor {

	private static ListeningScheduledExecutorService mListeningScheduledExecutorService = null;
	private static ScheduledExecutorService mScheduledExecutorService = null;

	private static boolean isTurnOn = false;

	public static class doWork implements Runnable {
		private String name = null;

		public doWork(String name) {
			this.name = name;
		}

		@Override
		public void run() {
			if (isTurnOn) {
				System.out.println(name + " 完工!");
			} else {
				mListeningScheduledExecutorService.schedule(this, 1,
						TimeUnit.SECONDS);
				System.out.println(name + " 等待開工");
			}
		}
	}

	public static void main(String[] args) {
		mScheduledExecutorService = Executors.newScheduledThreadPool(5,
				Executors.defaultThreadFactory());
		mListeningScheduledExecutorService = MoreExecutors
				.listeningDecorator(mScheduledExecutorService);
		for (int i = 1; i <= 9; i++) {
			mListeningScheduledExecutorService.submit(new doWork("任務" + i));
		}
		
		// 打開電源的工作
		mListeningScheduledExecutorService.submit(new Runnable() {
			@Override
			public void run() {
				isTurnOn = true;
			}
		});
	}

}
