《netty》netty源码分析之future和promise

future

 java.util.concurrent.Future<V>,   Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。

get()方法可以当任务结束后返回一个结果,如果调用时,工作还没有结束,则会阻塞线程,直到任务执行完毕

get(long timeout,TimeUnit unit)做多等待timeout的时间就会返回结果

cancel(boolean mayInterruptIfRunning)方法可以用来停止一个任务,如果任务可以停止(通过mayInterruptIfRunning来进行判断),则可以返回true,如果任务已经完成或者已经停止,或者这个任务无法停止,则会返回false.

isDone()方法判断当前方法是否完成

isCancel()方法判断当前方法是否取消

举个例子: FutureTask-->RunnableFuture--> Future

	public static void main(String[] args) throws InterruptedException, ExecutionException {
		Callable<String> callable = new Callable<String>(){
			 
			@Override
			public String call() throws Exception {
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return "工作做完了";
			}
		};
		FutureTask<String> futureTask = new FutureTask<String>(callable);
		
		new Thread(futureTask).start();
		
		//阻塞或取结果
		System.out.println("----"+futureTask.get());
	}


ChannelFuture

netty对future做了扩展

public interface ChannelFuture extends Future<Void> {

    /**
     * Returns a channel where the I/O operation associated with this
     * future takes place.
     */
    Channel channel();

    @Override
    ChannelFuture addListener(GenericFutureListener<? extends Future<? super Void>> listener);

    @Override
    ChannelFuture addListeners(GenericFutureListener<? extends Future<? super Void>>... listeners);

    @Override
    ChannelFuture removeListener(GenericFutureListener<? extends Future<? super Void>> listener);

    @Override
    ChannelFuture removeListeners(GenericFutureListener<? extends Future<? super Void>>... listeners);

    @Override
    ChannelFuture sync() throws InterruptedException;

    @Override
    ChannelFuture syncUninterruptibly();

    @Override
    ChannelFuture await() throws InterruptedException;

    @Override
    ChannelFuture awaitUninterruptibly();

    boolean isVoid();
}

重点看一下

 ChannelFuture addListener(GenericFutureListener<? extends Future<? super Void>> listener);

GenericFutureListener

public interface GenericFutureListener<F extends Future<?>> extends EventListener {

    /**
     * Invoked when the operation associated with the {@link Future} has been completed.
     *
     * @param future  the source {@link Future} which called this callback
     */
    void operationComplete(F future) throws Exception;
}

这个类相当于执行操作worker ,  执行完成后 回调.  对与主线程来说是异步的.

回调函数

https://blog.csdn.net/jiayi_yao/article/details/51046526

promise

promise类似,提供了write的异步回调.

猜你喜欢

转载自blog.csdn.net/kaige8312/article/details/84867050
今日推荐