Looking at the javadocs it just says
Future submit(Runnable task, T result) Submits a Runnable task for executio
Runnable does not return anything and Future must return something so this method allows you to predefine the result of the returned future.
If you don't want to return a thing you can return null and I think the Void type exists to express that kind of things.
Future myFuture = executor.submit(myTask, null);
You know myFuture.get() will return null in this case but only after the task has been run, so you would use it to wait and throw any exception that were thrown in the task.
try {
myFuture.get();
// After task is executed successfully
...
} catch (ExecutionException e) {
Throwable c = e.getCause();
log.error("Something happened running task", c);
// After task is aborted by exception
...
}