1 |
|
/* |
2 |
|
* Written by Doug Lea with assistance from members of JCP JSR-166 |
3 |
|
* Expert Group and released to the public domain, as explained at |
4 |
< |
* http://creativecommons.org/licenses/publicdomain |
4 |
> |
* http://creativecommons.org/publicdomain/zero/1.0/ |
5 |
|
*/ |
6 |
|
import java.util.concurrent.ExecutionException; |
7 |
|
import java.util.concurrent.CancellationException; |
93 |
|
assertFalse(a.isCompletedAbnormally()); |
94 |
|
assertNull(a.getException()); |
95 |
|
assertSame(expected, a.getRawResult()); |
96 |
< |
assertSame(expected, a.join()); |
96 |
> |
|
97 |
> |
{ |
98 |
> |
Thread.currentThread().interrupt(); |
99 |
> |
long t0 = System.nanoTime(); |
100 |
> |
assertSame(expected, a.join()); |
101 |
> |
assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS); |
102 |
> |
Thread.interrupted(); |
103 |
> |
} |
104 |
> |
|
105 |
> |
{ |
106 |
> |
Thread.currentThread().interrupt(); |
107 |
> |
long t0 = System.nanoTime(); |
108 |
> |
a.quietlyJoin(); // should be no-op |
109 |
> |
assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS); |
110 |
> |
Thread.interrupted(); |
111 |
> |
} |
112 |
> |
|
113 |
|
assertFalse(a.cancel(false)); |
114 |
|
assertFalse(a.cancel(true)); |
115 |
|
try { |
131 |
|
assertTrue(a.cancel(true)); |
132 |
|
|
133 |
|
try { |
134 |
+ |
Thread.currentThread().interrupt(); |
135 |
|
a.join(); |
136 |
|
shouldThrow(); |
137 |
|
} catch (CancellationException success) { |
138 |
|
} catch (Throwable fail) { threadUnexpectedException(fail); } |
139 |
+ |
Thread.interrupted(); |
140 |
+ |
|
141 |
+ |
{ |
142 |
+ |
long t0 = System.nanoTime(); |
143 |
+ |
a.quietlyJoin(); // should be no-op |
144 |
+ |
assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS); |
145 |
+ |
} |
146 |
|
|
147 |
|
try { |
148 |
|
a.get(); |
162 |
|
assertFalse(a.isCancelled()); |
163 |
|
assertFalse(a.isCompletedNormally()); |
164 |
|
assertTrue(a.isCompletedAbnormally()); |
165 |
< |
assertSame(t, a.getException()); |
165 |
> |
assertSame(t.getClass(), a.getException().getClass()); |
166 |
|
assertNull(a.getRawResult()); |
167 |
|
assertFalse(a.cancel(false)); |
168 |
|
assertFalse(a.cancel(true)); |
169 |
|
|
170 |
|
try { |
171 |
+ |
Thread.currentThread().interrupt(); |
172 |
|
a.join(); |
173 |
|
shouldThrow(); |
174 |
|
} catch (Throwable expected) { |
175 |
< |
assertSame(t, expected); |
175 |
> |
assertSame(t.getClass(), expected.getClass()); |
176 |
> |
} |
177 |
> |
Thread.interrupted(); |
178 |
> |
|
179 |
> |
{ |
180 |
> |
long t0 = System.nanoTime(); |
181 |
> |
a.quietlyJoin(); // should be no-op |
182 |
> |
assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS); |
183 |
|
} |
184 |
|
|
185 |
|
try { |
186 |
|
a.get(); |
187 |
|
shouldThrow(); |
188 |
|
} catch (ExecutionException success) { |
189 |
< |
assertSame(t, success.getCause()); |
189 |
> |
assertSame(t.getClass(), success.getCause().getClass()); |
190 |
|
} catch (Throwable fail) { threadUnexpectedException(fail); } |
191 |
|
|
192 |
|
try { |
193 |
|
a.get(5L, SECONDS); |
194 |
|
shouldThrow(); |
195 |
|
} catch (ExecutionException success) { |
196 |
< |
assertSame(t, success.getCause()); |
196 |
> |
assertSame(t.getClass(), success.getCause().getClass()); |
197 |
|
} catch (Throwable fail) { threadUnexpectedException(fail); } |
198 |
|
} |
199 |
|
|
205 |
|
* differently than supplied Recursive forms. |
206 |
|
*/ |
207 |
|
|
208 |
< |
static final class FJException extends RuntimeException { |
208 |
> |
public static final class FJException extends RuntimeException { |
209 |
|
FJException() { super(); } |
210 |
|
} |
211 |
|
|