`
buzhucele
  • 浏览: 332402 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java同步例子之FutureTask

    博客分类:
  • java
阅读更多
仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算.
package concurrent;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * FutureTask
 * 
 * @author user
 * 
 */
public class FutureTaskTest {

	private final FutureTask<ProductInfo> future = new FutureTask<ProductInfo>(
			new Callable<ProductInfo>() {
				public ProductInfo call() throws InterruptedException {
					return loadProductInfo();
				}
			});

	public ProductInfo loadProductInfo() throws InterruptedException {
		System.err.println("=====waiting========");
		Thread.sleep(5000);
		return new ProductInfo();
	}

	private final Thread thread = new Thread(future);

	public void start() {
		thread.start();
	}

	public ProductInfo get() throws InterruptedException, ExecutionException,
			TimeoutException {
		try{
			return future.get(1, TimeUnit.SECONDS);
		} catch(TimeoutException e) {
                        //future.cancel(true); //取消任务
			System.err.println("火速返回,失败!");
			return future.get(10, TimeUnit.SECONDS);
		}
	}

	/**
	 * @param args
	 * @throws ExecutionException
	 * @throws InterruptedException
	 * @throws TimeoutException
	 */
	public static void main(String[] args) throws InterruptedException,
			ExecutionException, TimeoutException {
		FutureTaskTest test = new FutureTaskTest();
		test.start();
		System.err.println("=======begin========");
		System.err.println(test.get());
		System.err.println("=======end========");
	}

}

class ProductInfo {
	public String toString() {
		return "**ProductInfo**";
	}
}
分享到:
评论

相关推荐

    java多线程并发编程例子

    `TestFutureTask.java`可能包含了如何使用`FutureTask`来管理和获取异步任务结果的代码。 以上这些工具类在并发编程中都有其特定的使用场景和优势。通过学习这些示例,开发者能够更好地理解和运用Java的并发工具,...

    Java分布式应用学习笔记05多线程下的并发同步器

    本篇文章将深入探讨Java中的并发同步器,并通过具体的例子来解释如何使用`FutureTask`来实现线程之间的协作。 #### 2. FutureTask简介 `FutureTask`是Java并发编程中非常重要的一个类,它是`Future`接口的一个具体...

    java线程实例 各种小Demo

    为了解决多线程并发访问共享资源可能导致的问题,Java提供了多种同步机制: 1. synchronized关键字:用于方法或代码块,保证同一时间只有一个线程能执行特定代码。 2. volatile关键字:保证变量在多线程环境中的可见...

    java 并发学习总结

    3. **同步工具类**:Java并发包`java.util.concurrent`中的工具类,如`Semaphore`(信号量)、`CyclicBarrier`(回环栅栏)、`CountDownLatch`(倒计时器)和`FutureTask`(未来任务)等,提供了更灵活的线程同步和...

    百度Java面试题 前200页精选(中)

    Vector和SimpleDateFormat是线程安全类的例子,而java原型不是线程安全的。为了确保线程安全,常常需要使用同步机制,如synchronized关键字和各种并发工具类。 ### 并发工具类 Java提供了丰富的并发工具类,帮助...

    JAVA-multithreaded-programming.rar_Java @multithreaded_java prog

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率...通过阅读提供的"JAVA多线程编程详解-详细操作例子.doc"文档,你可以深入了解这些概念并学习如何在实际项目中应用。

    java-concurrent:java 并发编程例子

    总之,Java并发编程是一门深奥的学问,它涉及到线程安全、同步机制、线程池管理等多个方面。熟练掌握`java.util.concurrent`包中的工具和原理,将使你的Java多线程应用更加健壮、高效。对于`java-concurrent-master`...

    java线程编程(概念+实例)

    Java线程编程涉及到线程同步、线程安全、死锁等问题,例如可以使用synchronized关键字、wait()、notify()和notifyAll()方法来协调线程间的协作。此外,Java还提供了一些高级并发工具,如Semaphore(信号量)、...

    Java并发编程实践-电子书-03章

    - **3.2.1 锁同步法**:传统上,Java使用同步块(`synchronized`)来确保对共享变量的独占访问。尽管这种方法简单易用,但在高并发场景下可能导致性能瓶颈,特别是当多个线程争用同一个锁时。 - **3.2.2 比较并交换**...

    Java并发基础.docx

    Java并发编程是Java开发中的重要概念,特别是在处理高性能和高效率的应用时不可或...在实际开发中,还要注意线程安全、同步机制(如`synchronized`关键字、`Lock`接口)、线程池等高级话题,以确保程序的正确性和性能。

    Java多线程指南

    - 如时钟程序的例子所示,使用三个线程分别处理时、分、秒的显示,可以使程序更加简洁易懂。 **3. 简化异步事件的处理** - 异步处理可以避免阻塞问题,提高程序响应速度。例如,在网络服务器中,每个客户端连接都...

    商业编程-源码-一个用多线程实现文件查找的例子.zip

    比如在Java中,可以使用`Thread`类或`Runnable`接口来创建线程,或者使用`FutureTask`与`ExecutorService`配合进行异步操作。Python中则有`threading`模块,C++有`std::thread`库等。 此外,多线程编程需要注意线程...

    北京恒华科技校园招聘Java Web开发工程师笔试题

    - **使用Callable和FutureTask**:Callable接口允许返回结果,FutureTask是它的包装器,可以放入ExecutorService中执行。 - **使用线程池**:通过ExecutorService,如ThreadPoolExecutor,可以更高效地管理线程。 ...

    浅析Java中如何实现线程之间通信

    Java中的线程间通信是多线程编程中的关键概念,它允许不同线程间共享数据、协调执行顺序,以实现复杂任务的同步。在Java中,有多种方式可以实现线程间的通信,以下将详细解释并举例说明这些方法。 1. **线程的join...

    Java并发面试题整理(答案)

    - **原子性**:原子性保证了操作不会被其他线程中断,比如`AtomicInteger`类中的原子操作就是例子。 - **可见性**:可见性确保了当一个线程修改了共享变量,其他线程能立刻看到修改。`volatile`关键字可以提供这种...

    31 凭票取餐—Future模式详解.pdf

    Future模式的灵感来源于现实生活中的场景,如本文开头提到的买午餐和牙膏的例子,通过小票作为取餐凭证,实现并行处理和同步获取结果。 1. Future模式介绍 Future模式的核心是Future接口,它提供了一种方式来获取...

    大并发编程交流

    - **Synchronized 关键字**:这是最基本的同步机制之一,用于保证在任何时候只有一个线程可以访问特定的方法或者代码块。 - **Semaphore、CountdownLatch**:这些类提供了一种比 `synchronized` 更加灵活的方式来...

    Java多线程-多线程知识点总结和企业真题

    - 使用`FutureTask`类来包装一个`Callable`对象,并将其提交到`ExecutorService`中执行。 #### 二、企业真题解析 下面是一些典型的企业面试真题及其解析: 1. **线程概述** - **题1**:解释什么是线程? - ...

    Java多线程实现异步调用的方法

    Java多线程实现异步调用是提高程序效率的关键技术之一。在Java中,通过创建新线程并让它们独立运行来实现异步调用,这样可以使得主线程不被长时间阻塞,从而提高程序的响应速度。以下将详细介绍如何在Java中实现这一...

    多线程concurrent的用例

    在"多线程例子"这个压缩包中,可能包含了上述各种并发工具的实例代码,通过运行和分析这些代码,我们可以深入理解它们的工作原理和使用场景,提升在并发编程方面的技能。记得在实践中注意线程安全,避免死锁、活锁和...

Global site tag (gtag.js) - Google Analytics