`
brzone
  • 浏览: 2680 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

callable和Future

    博客分类:
  • java
阅读更多

      Callable,线程执行任务,它是jdk1.5加入到api中的,相比于Runnable,它有俩大优点:第一,它可以有返回值,且返回值由我们事先泛型的Callable<T>中的T决定。第二,当我们在执行一个任务时,如果超时,我们可以取消它的执行。
      下面的话,就看个例子咯

/**
 *
 * @author li jian
 * @mail brzone@126.com
 * @date 2012-9-25 上午09:47:37
 */
public class Client {

	public static void main(String[] args) throws InterruptedException,              ExecutionException, TimeoutException {

		ExecutorService exec = Executors.newSingleThreadExecutor();

       /**
		 * 执行Callable有俩中方法,
		 *          1. 就是下文的代码段,把Callable传给FutureTask,
		 *             创建FutureTask,然后execute FutureTask
		 *          2.Future<Boolean>  futer = exec.submit
		 *                           (new GirlAnswerCallable())
		 *            submit一个Callable,然后返回一个Future
		 *
		 *
		 */
      FutureTask<Boolean> futer = new FutureTask<Boolean>
                                   (new GirlAnswerCallable());

		exec.execute(futer);


		System.out.println("To girl: When I first saw you, I fell in love with you.");

		boolean success = false;

		try {

			/**
			 * 这里假设:
			 *         男孩向女孩表白,如果女孩超过一定时间没回复的话,
			 *         那就果断cancel吧,都放开点。
			 *         如果,在限定的时间回复的话,当然,女方回复必须是
			 *         false或者true,当然,听到这话,你应该知道什么意
			 *         思了吧.
			 *
			 *
			 *
			 *
			 */

			//如果延迟的话,便会抛出TimeoutException异常
			success = futer.get(5, TimeUnit.SECONDS);

			System.out.print("girl says: ");
			System.out.println(success ? "yes." : "no.");

		}catch(TimeoutException e) {

			System.out.println("女孩超过5秒没回复,你就死了这份心吧。");

			/**
			 * 中断运行,不能让女方给张"好人卡",拔腿就跑.
			 * 其实,这里是变相的要女方不要说话了(不执行),
			 * 因为男方走了,女方说话给谁听。
			 * 
			 * 当然如果是futer.cancel(false),就是说明,
			 * 想听她继续说,想"死"的明白
			 *
			 */
			futer.cancel(true);

		}

		exec.shutdown();

	}

}

 

/**
 * 女孩子的回复
 * @author li jian
 * @mail brzone@126.com
 * @date 2012-9-25 上午09:36:20
 */
public class GirlAnswerCallable  implements Callable<Boolean>{

	private static  final Random random  = new Random();

	@Override
	public Boolean call() throws Exception {

		TimeUnit.SECONDS.sleep(ansewerTime());

		return yesOrNo();
	}


	private int ansewerTime() {

		return random.nextInt(20);

	}

	private boolean yesOrNo() {

		return random.nextBoolean();
	}

}

 

分享到:
评论

相关推荐

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

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

    Callable和Future.doc

    Callable 和 Future 是 Java 多线程编程中两个重要的接口,它们在处理异步计算和结果获取方面发挥着关键作用。Callable 与 Runnable 相似,但具有更强大的功能,允许任务返回结果并处理异常。 Callable 接口: ...

    Java多线程Callable和Future接口区别

    "Java多线程Callable和Future接口区别" Java多线程Callable和Future接口是Java语言中两个非常重要的接口,它们都是Java多线程编程中使用的接口,用于描述异步计算的结果。在JavaSE5中引入的Callable是一个具有类型...

    java并发包之Callable和Future

    `Callable`和`Future`的组合是Java并发包中一个强大的工具,它弥补了`Runnable`接口的不足,使得异步编程可以获取到返回值并处理异常。同时,`ExecutorService`作为线程池的实现,为并发编程提供了一种优雅的解决...

    详解JDK中ExecutorService与Callable和Future对线程的支持

    Java并发编程中的ExecutorService、Callable和Future Java并发编程中,ExecutorService、Callable和Future是三大核心组件,它们之间紧密相连,共同实现了高效、安全的并发编程。下面我们将详细介绍这些组件的作用和...

    java通过Callable和Future来接收线程池的执行结果

    Java通过Callable和Future来接收线程池的执行结果 Java中的线程池执行结果获取一直是一个棘手的问题,对于直接继承Thread的方式或实现Runnable接口的方式,都无法获取到线程执行的返回结果。如果线程在执行过程中...

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

    Java中的Runnable、Callable、Future和FutureTask是Java多线程编程中的核心概念,它们各自扮演着不同的角色,共同协作以实现并发任务的管理和执行。 1. **Runnable**: Runnable是最基本的多线程接口,它只有一个`...

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

    Java concurrency线程池之Callable和Future Java concurrency是一个重要的概念,在Java编程中,线程池是一个关键组件。今天,我们将详细介绍Java concurrency线程池之Callable和Future,这两个组件在Java并发编程中...

    Callable,Future的使用方式

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

    Callable:Callable与Future在Web应用中的优化案例

    在Java编程中,Callable接口和Future接口是多线程编程中的重要工具,它们在Web应用程序的性能优化中扮演着关键角色。本篇文章将深入探讨Callable和Future如何在Web应用中提高效率并优化资源利用。 Callable接口是...

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

    从Java 1.5开始,引入了Callable和Future接口,为并行编程提供了一种更为高效和便捷的解决方案。 Callable接口是Java并发库中的一个关键接口,位于`java.util.concurrent`包下。Callable接口与Runnable接口类似,但...

    java自定义任务类定时执行任务示例 callable和future接口使用方法

    在Java多线程编程中,`Callable`接口和`Future`接口是两个重要的组件,它们提供了比`Runnable`接口更强大的功能,尤其是在处理异步计算和结果获取时。本文将详细介绍这两个接口以及如何使用它们来创建自定义任务类以...

    java Callable与Future的详解及实例

    Callable 和 Future 是 Java 多线程编程中的两个关键接口,它们在 Java 5 及以上版本引入,以增强并发处理的能力。Callable 接口类似 Runnable,但提供了更丰富的功能,而 Future 对象则用于管理和控制异步计算的...

    总结了Thread-Callable-Future的小demo

    自留demo,主要是Thread-Callable-Future的基本实现。 参考文章: 1、深入理解Callable https://blog.csdn.net/qq_19431333/article/details/77483763 2、彻底理解Java的Future模式: ...

    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 ...

    详解Java Callable接口实现多线程的方式

    Callable接口和Future接口的组合使用,能够实现多线程并发执行任务,并获取执行结果。 一、Callable接口简介 Callable接口是一个泛型接口,用于表示可以调用并返回结果的代码。它提供了一个call()方法,该方法...

    Java特别篇-关于线程创建的三种方式的总结对比

    ### Java特别篇-关于线程创建的三种方式的总结对比 ... - **使用Callable和Future接口**:这种方式支持返回结果和抛出异常,适合需要计算结果的场景。相对前两种方式更为复杂,但在某些场景下非常有用。

    Java并发编程Callable与Future的应用实例代码

    然后,我们使用Callable来定义查评论列表和查点赞列表的任务,并将其提交给线程池。最后,我们使用Future来获取Callable任务的返回值。 异步化改造接口 在上面的代码中,我们可以看到异步化改造接口的实现。我们...

Global site tag (gtag.js) - Google Analytics