`

FutureTask例子(转)

    博客分类:
  • java
 
阅读更多

转自:http://programmingexamples.wikidot.com/futuretask

A cancellable asynchronous computation. This class provides a base implementation of Future, with methods to start and cancel a computation, query to see if the computation is complete, and retrieve the result of the computation. The result can only be retrieved when the computation has completed; the get method will block if the computation has not yet completed. Once the computation has completed, the computation cannot be restarted or cancelled.[1]

The following example illustrates the use of the Futuretask together with the Callable.
It reverses the submitted string slowly at a rate of one char per second. In the mean time, the main thread keeps polling to see if the task is completed.

import java.util.concurrent.*;
import java.util.concurrent.ExecutorService;

public class MyStringReverser
{
    ExecutorService executor = Executors.newFixedThreadPool(1);

    SlowStringReverser reverser = new SlowStringReverser();

    void doReverse(final String target) throws InterruptedException
    {

        FutureTask<String> future = new FutureTask<String>(
                new Callable<String>()
                {
                    public String call()
                    {
                        return reverser.reverseString(target);
                    }
                });
        executor.execute(future);

        // try every 10 seconds
        while (!future.isDone())
        {
            System.out.println("Task not yet completed.");
            try
            {
                Thread.sleep(500);
            } catch (InterruptedException ie)
            {
                System.out.println("Will check after 1/2 sec.");
            }
        }
        try
        {
            System.out.println("Here is the result..." + future.get());
        } catch (ExecutionException ex)
        {
        }
        executor.shutdown();
        return;
    }

    public static void main(String args[])
    {
        MyStringReverser msr = new MyStringReverser();
        try
        {
            msr.doReverse("foobar");
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

class SlowStringReverser
{
    StringBuffer orgString;

    StringBuffer reversedString;

    SlowStringReverser(String orgStr)
    {
        orgString = new StringBuffer(orgStr);
    }

    SlowStringReverser()
    {

    }

    public String reverseString(String str)
    {
        orgString = new StringBuffer(str);
        reversedString = new StringBuffer();
        for (int i = (orgString.length() - 1); i >= 0; i--)
        {

            reversedString.append(orgString.charAt(i));
            System.out.println("Reversing one character per second."
                    + reversedString);
            try
            {
                Thread.sleep(1000);
            } catch (InterruptedException ie)
            {
            }
        }
        return reversedString.toString();
    }
}
分享到:
评论

相关推荐

    FutureTask学习

    在上述例子中,我们创建了一个`Callable`任务,然后用`FutureTask`包装它,并提交给`ExecutorService`执行。`get()`方法被用来获取任务的结果。 总之,`FutureTask`是Java并发编程中用于异步计算的一个强大工具,它...

    spring线程池ThreadPoolExecutor配置以及FutureTask的使用

    下面是一个使用`ThreadPoolTaskExecutor`和`FutureTask`的例子: ```java ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) context.getBean("threadPoolTaskExecutor"); Callable&lt;Integer&gt; callable ...

    简谈java并发FutureTask的实现

    Java并发编程中,`FutureTask`是一个非常关键的组件,它结合了`Runnable`和`Future`接口的能力,使得我们可以在异步执行的任务完成后获取其结果。`FutureTask`不仅是一个可取消的任务,还能报告其执行状态。在这个...

    java多线程并发编程例子

    7. **FutureTask**:`FutureTask`实现了`Future`接口,它表示一个异步计算的结果。你可以提交一个`Callable`给`Executor`,然后使用`FutureTask`来获取计算结果。`TestFutureTask.java`可能包含了如何使用`...

    android异步操作例子

    本例子将深入探讨如何在Android中进行异步操作,以提升用户体验。 首先,我们要了解Android的主线程,也称为UI线程,它的主要职责是处理用户交互和更新用户界面。任何长时间运行的操作(如网络请求、数据库操作或...

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

    在这个例子中,我们创建了一个`ExecutorService`来执行任务,然后创建了一个`FutureTask`,将`Callable`实例作为参数传入。`ExecutorService`执行`FutureTask`,`call()`方法在新线程中运行,返回一个字符串。通过...

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

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

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

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

    BlockingQueue队列自定义超时时间取消线程池任务

    在这个例子中,我们将任务放入`BlockingQueue`,然后在`submitTask`方法中等待任务完成或超时。超时后,我们尝试取消任务。这提供了一种灵活的方式来管理和控制异步任务,使其具备超时取消的能力。 总的来说,通过...

    安卓通过线程刷新view的例子

    5. **FutureTask**:可以与ExecutorService配合使用,返回一个Future对象,该对象可以用来获取任务的执行结果,适合在多个线程间同步。 6. **LiveData** 和 **ViewModel**(Android Architecture Components):...

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

    然后,将Callable对象包装成一个FutureTask,FutureTask同时实现了Runnable接口,因此可以被线程执行。 2. Future的使用 示例代码中,创建了一个`FutureTask&lt;String&gt; cookTask`,它的构造函数接收一个Callable对象...

    java线程实例 各种小Demo

    3. 实现Callable接口与FutureTask:Callable接口的call()方法可以返回一个结果,FutureTask可以用于获取这个结果。这种方式适合需要返回值的多线程场景。 二、线程状态与控制 Java线程有五种状态:新建、可运行、...

    Java多线程之Callable接口的实现

    在网上,看到了几个比较好的代码例子,例如: a. Callable任务借助FutureTask运行: public class CallableAndFutureTask { public static void main(String[] args) { Callable&lt;Integer&gt; callable = new ...

    java-101

    在这个例子中,`MyTask`类定义了一个返回字符串的`call()`方法。 接下来,我们需要了解`FutureTask`。`FutureTask`是Java并发包(java.util.concurrent)中的一个类,它是一个可以取消的任务,同时也是一个`Future`...

    多线程发邮件

    在这个例子中,使用了`Executors.newFixedThreadPool(int nThreads)`来创建一个固定大小的线程池。这意味着线程池会预先创建nThreads个线程,即使它们暂时没有任务可做,也不会立即终止,而是保持待命状态。这有助于...

    java线程的run()没有返回值怎么办?

    在这个例子中,`MyCallableTask`类实现了`Callable&lt;String&gt;`接口,`call()`方法会返回一个字符串。 接下来,你可以使用`FutureTask`或者`ExecutorService`来执行这个`Callable`任务: ```java import java.util....

    java-concurrent:java 并发编程例子

    `FutureTask`是Future和Callable的组合,可以作为ExecutorService的提交对象。 3. **线程局部变量ThreadLocal**:ThreadLocal为每个线程都提供了一个独立的变量副本,线程间的变量不会相互影响,常用于存储线程私有...

    Java多线程指南

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

    java Future 接口使用方法详解

    以下是一个使用`FutureTask`实现超时控制的例子: ```java ExecutorService executor = Executors.newSingleThreadExecutor(); FutureTask&lt;String&gt; future = new FutureTask(new Callable() { public String call...

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

    - **3.4.5 Future和FutureTask**:`Future`接口表示异步计算的结果,`FutureTask`是`Future`的一个具体实现,它代表一个可以取消的异步计算。 #### 3.5 显示锁 - **3.5.1 ReentrantLock**:可重入锁(`...

Global site tag (gtag.js) - Google Analytics