Check out Failsafe (which I authored). It's a simple, zero-dependency library for performing retries, and supports synchronous and asynchronous retries, Java 8 integration, event listeners, integration with other async APIs, etc:
RetryPolicy retryPolicy = new RetryPolicy() .handle(ConnectException.class, SocketException.class); .withMaxRetries(3);Connection connection = Failsafe.with(retryPolicy).get(() -> connect());
Doesn't get much easier.