callable结合FutureTask的多线程使用(免打扰模式)
View Code
package use.of.futuretask; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * * * Callable类就是一个有返回值的任务 * 对于任务与Thread之间的关系,可以这样子理解: * Callable类的实例就是一个锦囊妙计;而Thread就是执行这个锦囊妙计的过程 * * FutureTask类(Future接口的一个实现)就是一个监视器:检测着被若干个异步线程操作的变量的一个类 * * 代码演示了主线程如何通过使用Callable类和FutureTask类,实现: * 主线程一边等待子线程的处理结果,一边完成自己的工作。 * *考虑以下一个小黑工kaiwii的故事…… */ public class TestFutureTask { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //准备一份工作给一个打工仔employee叫Kaiwii Employee kaiwii=new Employee("kaiwii"); //新建一个监工头inspector FutureTask<Double>inspector=new FutureTask<Double>(kaiwii); //让kaiwii这个打工仔工作 System.out.println("老板发话,让kaiwii这个打工仔工作吧!"); new Thread(inspector).start(); System.out.println("老板开始数钱!"); //老板一边数钱,一边命令监工inspector监视Kaiwii工作;一旦kaiwii完成工作就拿来让他检查 while(!inspector.isDone()){ System.out.println("老板数钱中……"); try { Thread.sleep(2000); System.out.println("111"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //老板交监工inspector将kaiwii的结果呈上来以便他验收kaiwii计算出来的结果 try { System.out.println("老板发现kaiwii的结果是:"+inspector.get()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //子线程 class Employee implements Callable<Double>{ String employee_name; private void setEmployee_name(String employee_name) { this.employee_name = employee_name; } public Employee(String employee_name) { setEmployee_name(employee_name); } @Override public Double call() throws Exception { // TODO Auto-generated method stub System.out.println("工人"+employee_name+"说:我开始工作了!!!!"); for(int i=1;i<=3;i++){ System.out.println("工人"+employee_name+" 第"+i+"次说:我在工作呢!!!!"); Thread.sleep(1000); System.out.println("222"); } System.out.println("工人"+employee_name+"说:我搞好了!!!!"); return Math.random(); } }
posted on 2012-09-12 10:40 Jessie~Alexandery 阅读(125) 评论(0) 收藏 举报

浙公网安备 33010602011771号