美文网首页Java
多线程应用设计 Future模式

多线程应用设计 Future模式

作者: ThingLin | 来源:发表于2017-06-02 21:52 被阅读23次

通过Future模式异步获得子线程执行结果。

JDK1.5后java.util.concurrent包下有现成的Future使用


package cn.thinglin.future;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
/**
 * java.util.concurrent下的Future
 * @author ThingLin
 *
 */
public class JDKFuture {

    public static void main(String[] args) {
        
        FutureTask<String> future = new FutureTask<String>(new Callable<String>() {

            @Override
            public String call() throws Exception {
                System.out.println("执行线程 "+Thread.currentThread().getName());
                TimeUnit.MILLISECONDS.sleep(2000); //休眠1s
                return "执行结果";
            }
        });
        
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                future.run(); //执行Future
            }
        },"thread-1").start();;
        
        System.out.println("执行完成否 "+future.isDone()); //线程执行完true
        
        System.out.println("获取结果");
        try {
            System.out.println(future.get()); //get是阻塞的
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        
        System.out.println("完毕");
    }
    
}


sdfdsfsdfsd.gif

实现一个Future

Callable接口


package cn.thinglin.future;

public interface Callable<T> {

    T call();
    
}


FutureTask

package cn.thinglin.future;

import java.util.concurrent.TimeUnit;

public class FutureTask<T> {

    private Callable<T> call;
    private boolean done = false;
    private volatile T result = null;
    
    public FutureTask(Callable<T> call){
        this.call = call;
    }
    
    public void run(){
        try {
            this.result = this.call.call();
        } catch (Exception e) {
            e.printStackTrace();
            this.result = null;
        }
        this.done = true;
    }
    
    public boolean isDone(){
        return this.done;
    }
    
    public synchronized T get() throws InterruptedException{
        for(;;){ //阻塞
            if(done){
                break;
            }
            TimeUnit.MILLISECONDS.sleep(1);
        }
        return this.result;
    }
    
}


测试


package cn.thinglin.future;

import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) {
        FutureTask<String> future = new FutureTask<String>(new Callable<String>() {

            @Override
            public String call() throws Exception {
                System.out.println("执行线程 "+Thread.currentThread().getName());
                TimeUnit.MILLISECONDS.sleep(2000); //休眠1s
                return "执行结果";
            }
        });
        
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                future.run(); //执行Future
            }
        },"thread-1").start();;
        
        System.out.println("执行完成否 "+future.isDone()); //线程执行完true
        
        System.out.println("获取结果");
        try {
            System.out.println(future.get()); //get是阻塞的
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("完毕");
    }
    
}

image.png

相关文章

  • Java8 CompletableFuture指北

    一、JAVA 异步处理的演变 1.1 Future JDK 5引入了Future模式。Future模式是多线程设计...

  • Future

    Future模式 概念 ```Future模式是多线程设计常用的一种设计模式,类似商品订单。商品下单后,会立即得到...

  • 并行设计模式(一)-- Future模式

    Java多线程编程中,常用的多线程设计模式包括:Future模式、Master-Worker模式、Guarded ...

  • 多线程Future设计模式的两种用法

    多线程Future设计模式 Future接口定义: Future接口的实现类: 封装任务的FutureTask接口...

  • 多线程应用设计 Future模式

    通过Future模式异步获得子线程执行结果。 JDK1.5后java.util.concurrent包下有现成的F...

  • Future设计模式

    一、什么是Future模式:Future设计模式是Java多线程开发常用设计模式。一句话,将客户端请求的处理过程从...

  • concurrent中Future真实例子分享

    Future是非常常用的多线程设计模式,因此在JDK中内置了Future模式的实现。这些类在java.util.c...

  • Java多线程 - Future模式

    什么是Future模式 Future模式是多线程开发中非常常见的一种设计模式。它的核心思想是异步调用。当我们需要调...

  • Java8新的异步编程方式 CompletableFuture(

    一. Future JDK 5引入了Future模式。Future接口是Java多线程Future模式的实现,在j...

  • Future :多线程设计模式

    当一个线程串行执行多个任务处理会花费大量时间时,可以考虑把串行任务分解成并行任务去处理,节约时间。例如:原来一个线...

网友评论

    本文标题:多线程应用设计 Future模式

    本文链接:https://www.haomeiwen.com/subject/rnnufxtx.html