首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

[Google Guava札记](九)concurrent

2012-06-30 
[Google Guava笔记](九)concurrent7com.google.common.util.concurrent:?接口:?????????ListenableFuture

[Google Guava笔记](九)concurrent

7com.google.common.util.concurrent:

?

接口:

?????????ListenableFuture<V>:继承java的Future接口,增加了addListener(Runnablelistener, Executorexecutor)方法,注册一个监听器,当Future中的任务完成时,在executor中运行listener。

????????CheckedFuture<V, XentendsException>:继承ListenerFuture<V>接口,定义了checkedGet()和checkedGet(longtimeout, TimeUnit unit),这些方法将get(...)方法的异常转换为和应用相关的异常。

????????UninterruptibleFuture<V>:继承java的Future接口,该类型的get()调用不能被中断,如果该Future对应的线程被中断,get()方法继续阻塞直到结果可用或者超时,然后才会中断线程。通过Futures的静态方法makeUninterruptible(Future)可获得一个实例。

???????? Service:有操作状态的对象,通过附加的同步生命周期方法start()和stop()来转到或离开某个状态。service的正常生命周期有:NEW、STARTING、RUNNING、STOPPING、TERMINATED,此外State还有一个枚举值:FAILED。定义了start()、startAndWait()、 isRunning()、state()、 stop()、stopAndWait()方法。

????????TimeLimiter:该类型生成一个代理,当调用被代理的对象的方法时,会强制加一个时间限制。定义了newProxy(Ttarget, Class<T> interfaceType, long timeoutDuration, TimeUnittimeoutUnit)和callWithTimeOut(Callable<T>callable, long timeoutDuration, TimeUnit timeoutUnit, booleaninterruptible),newProxy()方法生成target的一个代理,callWithTimeout()方法:如果callable执行完毕时还没有到达限定时间则将结果或异常传给调用者,否则抛出UncheckedTimeoutException。用法如下:

TimeLimiter limiter = …

TargetType proxy =limiter.newProxy(target, TargetType.class, 50,TimeUnit.MILLISECONDS);

try{

return proxy.someMethod();

}catch(UncheckedTimeoutException e) {

return DEFAULT_VALUE;

}

?

类:

????????AbstractFuture<V>:抽象类,实现了Future<V>接口。它借助一个AbstractQueuedSynchronizer来处理同步事物,保证线程的安全性。这个类实现了Future的所有方法。

???????? AbstractCheckedFuture<V,X>:抽象类,实现了CheckedFuture<V,X>接口。这个类封装了一个ListenableFuture<V>delegate,Future的基本方法都委托给了delegate,提供了checkGet(...)方法,这个方法调用get(),如果正常获得结果则直接返回,否则将捕获到的异常转换为X类型的异常。

????????AbstractListenableFuture<V>:抽象类,扩展了AbstractFuture<V>,实现了ListenableFuture<V>。该类型用一个ExecutorList来确保所有的监听者都会被执行。监听者/执行器对被存放在ExecutorList中,并将会按照添加到ExecutorList的顺序来执行,但是,因为线程调度,不保证JVM会按该顺序来执行这些线程。此外,任务完成之后添加的监听者会被立即执行,甚至在之前添加的监听者尚未执行的情况下亦将如此。

???????? ForwardingFuture<V>:抽象类,扩展了ForwardingObject,实现了Future<V>。这个Future将所有的方法调用委托给另一个Future。

????????ForwardingListenableFuture<V>:抽象类,扩展了ForwardingFuture<V>,实现了ListenableFuture<V>接口。这个Future将所有的方法调用委托给另一个ListenableFuture。

????????ForwardingCheckedFuture<V,X>:抽象类,扩展了ForwardingListenableFuture<V>,实现了CheckedFuture<V,X>接口。这个Future将所有的方法调用委托给另一个CheckedFuture。

???????? SettableFuture<V>:扩展了AbstractListenablFuture<V>类,被声明为final类。通过静态方法create()可获得该类的一个实例。set()、setException()、cancle()方法直接委托给父类。

????????ListenableFutureTask<V>:扩展了java的FutureTask<V>类,FutureTask类实现了Future和Runnbale接口,是可取消的异步计算。内部封装了一个私有的ExecutorList,它的子类的done()必须调用父类的done()。

AbstractService:抽象类,实现了Service接口。

AbstractIdleService:抽象类,实现了Service接口。

AbstraceExecutionThreadService:抽象类,实现了Service接口。

?????????ForwardingService:抽象类,扩展了ForwardingObject类,实现了Service接口。这个Service将所有的方法调用委托给另一个Service。

?????????ExecutionList:final类,实现了Runnable接口,封装了一个Queue,Queue的元素为RunnableExecutorPair类型。有两个成员方法:add(Runnable,Executor)和run()。

?????????SimpleTimeLimiter:final类,实现了TimeLimiter接口,封装了一个用于执行方法调用的ExecutorService。当限定时间到了时,执行方法的线程将会被中断。

?????????FakeTimeLimiter:final类,实现了TimeLimiter接口,是个假的TimeLimiter,不对调用做任何时间限制。

????????? ForwardingBlockingQueue:抽象类,扩展ForwardingQueue,实现了BlockingQueue。它将所有的方法调用委托给另一个BlockingQueue。

????????ThreadFactoryBuilder:ThreadFactory的生成器。提供以下特性:可设置线程的命名格式,可设置是否为后台线程,可设置线程的优先级,可设置未捕获异常的处理器。

MoreExecutors:

Callables:只有一个静态方法:returning(Tvalue),返回一个Callable<T>,它的call()方法返回value。

Futures:提供了很多静态的工具方法。

UncaughtExceptionHandlers:

UncheckedTimeoutException:

?

??????? 这一个包拖了很久才看完,因为我的确在多线程方面很弱...上周抽时间看了下java的concurrent包相关的资料,对它有了点了解,才回头来看guava的concurrent,这次就比较容易懂了(第一次看guava的concurrent,脑子里一团乱麻...)。

?

??????? 第一遍先这样过了,以后再更加深入的理解和学习。

?

??????? 以上。

?

?

热点排行