`
arcticfox9902
  • 浏览: 106903 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[Google Guava笔记](九)concurrent

阅读更多

7 com.google.common.util.concurrent

 

接口:

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

         CheckedFuture<V, X entends Exception>:继承 ListenerFuture<V>接口,定义了 checkedGet() checkedGet(long timeout, 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(T target, Class<T> interfaceType, long timeoutDuration, TimeUnit timeoutUnit) callWithTimeOut(Callable<T> callable, long timeoutDuration, TimeUnit timeoutUnit, boolean interruptible) 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(T value),返回一个 Callable<T>,它的 call()方法返回 value

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

UncaughtExceptionHandlers

UncheckedTimeoutException

 

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

 

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

 

        以上。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics