guava-retrying 源碼解析(阻塞策略詳解)
阿新 • • 發佈:2019-02-24
reads ads ret div src 底層 等待 spa ted
這是一種策略,用於決定重試者應如何在重試嘗試之間進行阻止。通常這只是一個thread.sleep(),但是如果需要的話,實現可能更復雜。
一、阻塞策略相關的類或接口
1、阻塞策略接口:BlockStrategy
底層默認使用來 Thread.sleep 完成線程阻塞,從而實現重試之間的等待{@link com.github.rholder.retry.WaitStrategy}。如果需要,實現可以更加復雜。
接口裏面有一個實現方法,如下。
2、阻塞策略工廠類:BlockStrategies。
該工廠類非常簡單,裏面只有一個阻塞策略實現類(ThreadSleepStrategy),並且該實現類只有一個默認構造方法,因此該工廠類也就只提供了一個工廠方法用於創建ThreadSleepStrategy實例。
二、阻塞策略ThreadSleepStrategy詳解
該類非常簡單,只有一個方法,如下,也正是通過該方法完成了兩次重試之間的阻塞:
// 阻塞邏輯是通過線程休眠實現的 @Override public void block(long sleepTime) throws InterruptedException { Thread.sleep(sleepTime); }
這樣其實就可以和 WaitStrategy策略串起來了,WaitStrategy為阻塞策略提供了阻塞時間。
guava-retrying 源碼解析(阻塞策略詳解)