1. 程式人生 > >guava-retrying 源碼解析(阻塞策略詳解)

guava-retrying 源碼解析(阻塞策略詳解)

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 源碼解析(阻塞策略詳解)