`
Donald_Draper
  • 浏览: 981121 次
社区版块
存档分类
最新评论

Callable与Future,FutureTask

    博客分类:
  • JUC
阅读更多
callable,future,futureTask基础:http://www.cnblogs.com/dolphin0520/p/3949310.html
线程池:http://cuisuqiang.iteye.com/blog/2019372
主类:
callable+future
public class TestFuture {
	public static void main(String[] args) {
        ExecutorService threadPool = Executors.newCachedThreadPool();
        Future<Boolean> uFuture = threadPool.submit(new UpdateCallable(6000));
        Future<Boolean> IFuture = threadPool.submit(new InsertCallable(12000));
        try {
        	threadPool.shutdown();//直到线程执行完毕
            boolean flag = true;
            while(flag){
            	if(uFuture.get()&&IFuture.get()){
            		flag = false;
            		System.out.println("is over!");
            	}
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}


callable+futureTask
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;


public class testFutureTask {
	public static void main(String[] args) {
	  ExecutorService threadPool = Executors.newCachedThreadPool();
	  UpdateCallable utask = new UpdateCallable(6000);
	  InsertCallable itask = new InsertCallable(12000);
      FutureTask<Boolean> UfutureTask = new FutureTask<Boolean>(utask);
      FutureTask<Boolean> IfutureTask = new FutureTask<Boolean>(itask);
      threadPool.submit(UfutureTask);
      threadPool.submit(IfutureTask);
      try {
      	threadPool.shutdown();//直到线程执行完毕
          boolean flag = true;
          while(flag){
          	if(UfutureTask.get()&&IfutureTask.get()){
          		flag = false;
          		System.out.println("is over!");
          	}
          }
      } catch (InterruptedException e) {
          e.printStackTrace();
      } catch (ExecutionException e) {
          e.printStackTrace();
      }
  } 
}

Callable:
import java.util.concurrent.Callable;

public class InsertCallable implements Callable<Boolean> {
	private Integer time = 3000;

	public InsertCallable(Integer time) {
		super();
		this.time = time;
	}

	public Boolean call() throws Exception {
		System.out.println("InsertCallable sleep time:" + time);
		Thread.sleep(time);
		System.out.println("InsertCallable up");
		return true;
	}
}
import java.util.concurrent.Callable;

public class UpdateCallable implements Callable<Boolean> {
	private Integer time = 3000;

	public UpdateCallable(Integer time) {
		super();
		this.time = time;
	}

	public Boolean call() throws Exception {
		System.out.println("UpdateCallable sleep time:" + time);
		Thread.sleep(time);
		System.out.println("UpdateCallable up");
		return true;
	}
}

测试结果:
UpdateCallable sleep time:6000
InsertCallable sleep time:12000
UpdateCallable up
InsertCallable up
is over!
分享到:
评论

相关推荐

    Java中的Runnable,Callable,Future,FutureTask的比较

    在实际开发中,ExecutorService(如ThreadPoolExecutor)经常与Future和FutureTask一起使用,因为ExecutorService可以提交Runnable或Callable任务,并返回Future,从而实现对任务的异步处理和结果获取。例如: ```...

    Java使用Callable和Future创建线程操作示例

    Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...

    Runnable、Callable、Future、FutureTask有什么关联.docx

    Runnable、Callable、Future、FutureTask有什么关联.docx

    Callable, Future, FutureTask2

    通过合规策略对服务器进行监控,确保服务器的运行、帐号在服务器上的操作符合预设的规则。日志:收集、整理服务器的日志信息,提供给管理员查看,并作为异常判断、故障排查的依据。进程:监控服务器上的进程,并对...

    【并发编程】 — Runnable、Callable、Future和FutureTask之间的关系

    2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...

    Callable,Future的使用方式

    Callable,Future的使用方式,里面使用了三种使用方式分别是FutureTask,ExecutorService,ExecutorCompletionService

    Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable

    `Future`、`FutureTask`、`Callable`和`Runnable`是Java并发编程中的核心接口和类,它们在Android开发中同样有着广泛的应用。下面将详细介绍这些概念以及它们如何协同工作。 1. `Runnable`: 这是Java中最基础的多...

    Callable和Future.doc

    在实际应用中,Java 提供了 FutureTask 类作为 Future 接口的一个实现,可以直接用于 Thread 或 ExecutorService。此外,SwingWorker 是 Swing 库中的一个 Future 实现,特别适用于 GUI 应用程序中的后台计算。 ...

    比较java中Future与FutureTask之间的关系

    Future与FutureTask之间的关系 在Java中,Future和FutureTask都是用于获取线程执行的返回结果,但是它们之间存在一些差异和关联。本文将详细介绍Future和FutureTask的关系、使用和分析。 一、Future介绍 Future...

    Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    在Java多线程编程中,CyclicBarrier、Callable、Future和FutureTask是四个重要的组件,它们各自提供了不同的功能,帮助开发者更好地管理和协调并发任务。接下来,我们将深入探讨这些组件的特性和使用方法。 首先,...

    Java中Future、FutureTask原理以及与线程池的搭配使用

    3. `&lt;T&gt; Future&lt;T&gt; submit(Callable&lt;T&gt; task)`:直接将`Callable`包装为`FutureTask&lt;T&gt;`并执行。 `FutureTask`的实现包括了任务状态的管理、中断处理和异常传播等复杂逻辑,确保了异步任务的正确执行和结果获取。...

    【Java】Callable创建线程用到的适配器模式(csdn)————程序.pdf

    Thread类不直接与Callable接口打交道,而是通过FutureTask来实现对Callable的调用。FutureTask实现了Runnable接口,使得它可以被Thread执行。在FutureTask的构造函数中,传入Callable对象,当FutureTask的run()方法...

    Java concurrency线程池之Callable和Future_动力节点Java学院整理

    它的实现类是FutureTask,在讲解FutureTask之前,我们先看看Callable, Future,FutureTask它们之间的关系图: Callable、Future、FutureTask之间的关系 RunnableFuture是一个接口,它继承了Runnable和Future这两个...

    浅谈在Java中使用Callable、Future进行并行编程

    Callable接口与Runnable接口类似,但它具有一个泛型方法`call()`,该方法在执行时会返回一个结果,并可能抛出异常。Callable接口的定义如下: ```java public interface Callable&lt;V&gt; { V call() throws Exception;...

    java多线程返回值使用示例(callable与futuretask)

    FutureTask&lt;String&gt; future = new FutureTask(new Callable() { @Override public String call() { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } return "11111...

    FutureTask学习

    `FutureTask`作为`Runnable`和`Callable`的桥梁,允许我们将一个`Callable`任务提交给`Executor`执行,并在后续代码中通过`FutureTask`的API查询任务状态,获取结果或取消任务。下面将详细介绍`FutureTask`的主要...

    JAVA中Callable的使用

    与Runnable接口相比,Callable接口提供了更强大的功能,因为Runnable只能定义无返回值的任务,而Callable可以定义有返回值的任务。这篇教程将深入探讨如何在Java中使用Callable。 Callable接口位于`java.util....

    Java线程池FutureTask实现原理详解

    FutureTask实现原理通过submit方法的返回值,为一个Future,实际上这个Future为FutureTask实例,通过此实例,调用get方法,可以阻塞当前线程,直到任务运行完毕,返回结果。整个调用链条如下所示:worker thread -&gt; ...

    java多线程编程同步器Future和FutureTask解析及代码示例

    在Java并发编程中,通常我们会使用`ExecutorService`来提交任务,而`Future`和`FutureTask`就是与这些任务交互的关键。 首先,`Future`是一个接口,它提供了一种机制来检查异步计算是否完成,以及在计算完成后获取...

    Java FutureTask类使用案例解析

    FutureTask&lt;Integer&gt; futureTask = new FutureTask(new Callable() { @Override public Integer call() throws Exception { log.info("inside callable future task ..."); return 1; } }); ExecutorService...

Global site tag (gtag.js) - Google Analytics