1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.util.concurrent;
17
18 import java.util.Locale;
19 import java.util.concurrent.CancellationException;
20 import java.util.concurrent.ExecutionException;
21 import java.util.concurrent.TimeUnit;
22 import java.util.concurrent.TimeoutException;
23
24
25
26
27
28
29 public abstract class AbstractFuture<V> implements Future<V> {
30
31 @Override
32 public V get() throws InterruptedException, ExecutionException {
33 await();
34
35 Throwable cause = cause();
36 if (cause == null) {
37 return getNow();
38 }
39 if (cause instanceof CancellationException) {
40 throw (CancellationException) cause;
41 }
42 throw new ExecutionException(cause);
43 }
44
45 @Override
46 public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
47 if (await(timeout, unit)) {
48 Throwable cause = cause();
49 if (cause == null) {
50 return getNow();
51 }
52 if (cause instanceof CancellationException) {
53 throw (CancellationException) cause;
54 }
55 throw new ExecutionException(cause);
56 }
57 throw new TimeoutException("timeout after " + timeout + " " + unit.name().toLowerCase(Locale.ENGLISH));
58 }
59 }