package com.github.atemerev.hollywood.office; import com.github.atemerev.hollywood.future.Promise; import com.github.atemerev.hollywood.future.PromiseExecutorService; import java.util.concurrent.Executors; /** * @author Alexander Temerev * @version $Id$ */ public class Fax { private static Fax instance = null; private Fax() { } //只有一个传真哦 public static Fax instance() { if (instance == null) { instance = new Fax(); } return instance; } //线程池 private PromiseExecutorService executor = new PromiseExecutorService(Executors.newFixedThreadPool(1)); //发送一个传真: 从线程池中取出一个线程来执行 public Promise<Void> send(FaxMessage message) { return executor.submit(new SendFaxTask(message)); } //发送传真的动作启用新线程. 因为耗时比较长 class SendFaxTask implements Runnable { private FaxMessage message; SendFaxTask(FaxMessage message) { this.message = message; } public void run() { try { System.out.println("Starting..."); //模拟耗时动作 Thread.sleep(50); System.out.println("Sending " + message + " ...done."); } catch (InterruptedException e) { // ignore. } } } }