--java.util.concurrent 之六:使用Future类和Callable类
http://kanglecjr.iteye.com/blog/1071199
--Java.util.concurrent 包 使用Future,Callable实现抢答模式
http://blog.csdn.net/u013025830/article/details/51373482
-- Java多线程之~~~Callable接口获得返回值
http://blog.csdn.net/a352193394/article/details/39505307
--Java多线程之Callable接口的实现
http://www.cnblogs.com/baizhanshi/p/6425209.html
--Callable,Runnable比较及用法
http://www.cnblogs.com/zeze/p/6293104.html
import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import org.apache.log4j.Logger; public class TaskDemo implements Callable<Boolean> { /** * CountDownLatch类只提供了一个构造器: * public CountDownLatch(int count) { }; //参数count为计数值 * 然后下面这3个方法是CountDownLatch类中最重要的方法: public void await() throws InterruptedException { }; //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行 public boolean await(long timeout, TimeUnit unit) throws InterruptedException { }; //和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行 public void countDown() { }; //将count值减1 * @param args */ private static final Logger LOGGER = Logger.getLogger(TaskDemo.class); private XTargetService xTargetService; private CountDownLatch countDownLatch; public TaskDemo() { super(); } public TaskDemo(XTargetService xTargetService,CurrentContext context, CountDownLatch countDownLatch) { super(); this.xTargetService = xTargetService; this.context = context; this.countDownLatch = countDownLatch; } @Override public Boolean call() throws Exception { try { Thread.sleep(3000); } catch (Exception e) { LOGGER.error("xxxxxx", e); }finally{ if (countDownLatch != null) { countDownLatch.countDown(); } } return true; } }