It is best to use CompletableFuture<Void>.
According to this answer found by Sotirios Delimanolis, Future<?> is a minor API flaw. In Java 6 the submit() method used a Future<Object> internally, and so its return type was set to Future<?>. In Java 7 the implementation changed to use Future<Void> internally, but it was too late to change the API so the return value stayed as Future<?>.
Newer Java APIs use Future<Void> and CompletableFuture<Void>. Those are the examples we should follow.