读书人

FutureTask例证(转)

发布时间: 2012-09-12 09:21:30 作者: rapoo

FutureTask例子(转)

转自: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();    }}

读书人网 >编程

热点推荐