`

Callable与Future的应用

阅读更多
/**
 * CallableAndFuture.java
 * cn.com.songjy.test.socket.thread
 * Function: TODO 
 *
 *   version    date      author
 * ──────────────────────────────────
 *   	1.0	 2013-8-17    songjy
 *
 * Copyright (c) 2013, TNT All Rights Reserved.
 */

package cn.com.songjy.test.socket.thread;

import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * ClassName:CallableAndFuture
 * Callable与Future的应用
 * @author songjy
 * @version 1.0
 * @since v1.0
 * @Date 2013-8-17 下午9:13:55
 */

public class CallableAndFuture {

	private static Log log = LogFactory.getLog(CallableAndFuture.class);

	public static void main(String[] args) {
		ExecutorService thread_pools01 = Executors.newSingleThreadExecutor();

		Future<String> future = thread_pools01.submit(new Callable<String>() {

			@Override
			public String call() throws Exception {
				Thread.sleep(5 * 1000l);
				return "hello";
			}
		});

		log.info("等待结果...");

		try {
			// log.info("得到结果:"+future.get());//一直等待执行结果
			log.info("得到结果:" + future.get(2, TimeUnit.SECONDS));// 等待2秒,2秒内若未获取到结果则终止任务
		} catch (InterruptedException e) {
			log.error(e.getMessage(), e);
		} catch (ExecutionException e) {
			log.error(e.getMessage(), e);
		} catch (TimeoutException e) {
			log.error(e.getMessage(), e);
		}

		thread_pools01.shutdown();

		ExecutorService thread_pools02 = Executors.newFixedThreadPool(10);// 固定大小线程池

		CompletionService<Integer> completion = new ExecutorCompletionService<Integer>(
				thread_pools02);

		//添加10个任务
		for (int i = 0; i < 10; i++) {
			final int seq = i;
			completion.submit(new Callable<Integer>() {

				@Override
				public Integer call() throws Exception {
					Thread.sleep(new Random().nextInt(5000));
					return seq;

				}
			});
		}
		
		//获取10个任务执行结果
		for(int i=0; i<10; i++) {
			try {
				log.info(completion.take().get());//哪个任务先执行完则打印哪个的结果
			} catch (InterruptedException e) {
				log.error(e.getMessage(), e);
			} catch (ExecutionException e) {
				log.error(e.getMessage(), e);
			}
		}
		
		thread_pools02.shutdown();
	}
}


来自:http://down.51cto.com/data/443429

	public void 线程池() throws InterruptedException, ExecutionException {

		ExecutorService threadPool = Executors.newFixedThreadPool(10);

		List<Future<Integer>> list = new ArrayList<>();

		for (int i = 0; i < 10; i++) {
			Future<Integer> future = threadPool.submit(new Callable<Integer>() {
				public Integer call() throws Exception {

					int i = new Random().nextInt(100);
					System.out.println(i);
					return i;
				}
			});

			list.add(future);
		}

		int sum = 0;

		for (Future<Integer> f : list) {
			sum += f.get();
		}
		System.out.println(sum);

	}
  • 大小: 168.7 KB
分享到:
评论

相关推荐

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

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

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

    Java并发编程Callable与Future的应用实例代码 在Java并发编程中,Callable与Future是两个非常重要的概念,它们通常结合使用来实现异步编程。在本文中,我们将详细介绍Callable与Future的应用实例代码,并探究它们在...

    Callable和Future.doc

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

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

    Java并发编程中的ExecutorService、Callable和Future ...在实际应用中,我们可以使用ExecutorService、Callable和Future来实现各种并发编程任务,如统计某个盘子的大小、统计多个盘子的总大小、实现高效的数据处理等。

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

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

    JAVA中Callable的使用

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

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

    Callable和Future接口广泛应用于多线程编程中,例如: * 网络编程:使用Callable和Future可以实现异步网络请求,并获取执行结果。 * 数据处理:使用Callable和Future可以实现并发数据处理,并获取执行结果。 * 图像...

    concurrent-csv-parser:使用 Executor 和 Callable-Future 进行并发任务处理

    技术方案基于ExecutorService、Callable、Future等高级Java并发API。 技术栈 JDK 8 Apache Maven v.3.2 构建说明 从应用程序根目录调用以下 maven 命令: mvn clean package 检查构建日志,确保构建成功: ...

    Java中的Callable接口最全讲义

    目录: 简介 Callable接口的基本用法 2.1 创建Callable任务 2.2 提交Callable任务 2.3 获取任务执行结果 Future接口的使用 3.1 获取任务执行状态 3.2 取消任务的执行 ...Callable的应用场景 最佳实践与注意事项

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

    本文将详细解释Callable接口的使用、适配器模式在创建线程中的应用,以及FutureTask在其中的角色。 首先,Callable接口与Runnable接口类似,都是用于创建新线程的接口。但是,Runnable接口的run()方法无返回值,而...

    Java多线程实现的四种方式

    在Java中,实现多线程有四种主要方法:继承Thread类、实现Runnable接口、使用ExecutorService和使用Callable与Future。下面将详细探讨这四种方式。 1. 继承Thread类 在Java中,我们可以直接继承Thread类并重写其run...

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

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

    JAVA多线程实现和应用总结

    Java多线程是编程中一个...而ExecutorService、Callable和Future的组合则提供了更高级的功能,如线程池管理、异步计算和结果获取,适用于复杂并发环境。在实际开发中,合理利用这些特性可以提高程序的效率和可维护性。

    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接口的实现

    Callable接口与Runnable接口的区别在于Callable接口可以返回结果并抛出异常,而Runnable接口不能返回结果也不能抛出异常。 在实现Callable接口时,我们需要重写call()方法,该方法定义了要执行的任务。例如,我们...

    异步编程的瑞士军刀:Java中Future和Callable接口的妙用

    Java是一种广泛使用的编程语言,由Sun Microsystems公司(现属于Oracle公司)在1995年首次发布。...5. **网络编程**:Java提供了丰富的网络通信API,使得开发网络应用变得容易。 6. **安全性**:Java提供了一个安全

    future.zip

    在Java编程中,`Future`接口是并发处理的一个关键概念,它是`java.util.concurrent`包的一部分,与`ExecutorService`和`Callable`一起构成了Java并发编程的重要基石。本文将详细解析`Future`接口及其在实际编程中的...

    Java多线程之异步Future机制的原理和实现共5页.p

    异步Future机制通常与ExecutorService和Callable接口一起使用。ExecutorService是一个线程池服务,可以提交任务并管理它们的生命周期。Callable接口类似于Runnable,但是它允许任务有返回值。 下面是一个简单的...

    Java多线程实现Callable接口

    通过以上知识点,我们可以看到Callable接口在Java多线程中的应用,它可以方便地处理返回值,并且与ExecutorService结合,提供了强大的并发处理能力。在实际开发中,特别是在大数据处理、计算密集型任务等场景下,...

    Java多线程与并发库高级应用

    为了更好地理解Java多线程与并发库的实际应用,我们可以考虑一个具体的案例——使用`ExecutorService`和`Future`实现一个简单的下载文件并合并的功能。 假设我们需要从网络上下载多个小文件,并将它们合并成一个大...

Global site tag (gtag.js) - Google Analytics