Future模式(凭据模式)

此种方式将Future与Task分离开来。导致finish()方法暴露出来。被外部调用。更优的方式将Future与Task结合起来。参考JDK FutureTask类

不便于管理。

如果要实现Cancle,参考FutureTask在内部将callback与future分离开来的设计

public interface Future<T>{

    //获取返回值

    T get() throws InterruptedException;

    //查看是否结束

    boolean done();

}

public interface FutureService<IN,OUT>{

    Future<?> submit(Runnable r);

    

    Future<OUT> sunmit(Task<IN,OUT> task,In input);



    static <T,R> FutureService<T,R> newService(){

        return new FutureServiceImpl();

    }

}





public class FutureTask<T> implements Future<T>{

    private T result;

    private boolean isDone = false;

    private final Object Lock= new Object;



    public T get() throws InterruptedException{

        synchronized(LOCK){

            while(!isDone){

                Lock.wait();

            }

        }

        return result;

    }



    protected void finish(T result){

        synchronized(LOCK){

            if(isDone){

                return;

            }

            this.result = result;

            this.isDone = true;

            LOCK.notifyAll();

        }

    }



    public boolean done(){

        return isDone;

    }

}



public class FutureServiceImpl<IN,OUT> implements FutureService<IN,OUT>{



    public Future<?> submit(Runnable r){

        final FutureTask<void> futrure = new FutureTask<>();

        new Thread(()——>{

            r.run();

            future.finish(null);

            }

        ).start();

        return futrure;

    }



    public Future<OUT> submit<Task<IN,OUT> task,IN input,Callback<OUT> callback){

        final FutureTask<OUT> futrure = new FutureTask<>();

        new Thread(() ——>{

          OUT result = task.get(input);

          future.finish(result);

          if(callback != null){

                callback.call(result);

            }

        }).start();

        return future;

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值