1 /*
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package jdk.testlibrary;
25
26 import java.lang.management.ManagementFactory;
27 import java.lang.management.ThreadInfo;
28 import java.lang.management.ThreadMXBean;
29 import java.util.concurrent.TimeoutException;
30
31 /**
32 * Thread which catches exceptions thrown during the execution
33 * and stores them for later analysis.
34 *
35 * <pre>
36 * {@code
37 * TestThread thread = new TestThread(new XRun() {
38 * public void run() {
39 * // do something
40 * }
41 * });
42 * thread.start();
43 * // do something
44 * Throwable uncaught = thread.getUncaught();
45 * }
46 * </pre>
47 */
48 public class TestThread extends Thread {
187 }
188
189 /**
190 * Waits during {@code timeout} for {@link TestThread} to die
191 * and returns exception caught during the execution.
192 *
193 * @param timeout The time to wait in milliseconds
194 * @return Exception caught during the execution
195 * @throws InterruptedException
196 */
197 public Throwable joinAndReturn(long timeout) throws InterruptedException {
198 join(timeout);
199 if (isAlive()) {
200 return new TimeoutException();
201 }
202 if (uncaught != null) {
203 return uncaught;
204 }
205 return null;
206 }
207
208 /**
209 * Waits until {@link TestThread} is in the certain {@link State}
210 * and blocking on {@code object}.
211 *
212 * @param state The thread state
213 * @param object The object to block on
214 */
215 public void waitUntilBlockingOnObject(Thread.State state, Object object) {
216 String want = object == null ? null : object.getClass().getName() + '@'
217 + Integer.toHexString(System.identityHashCode(object));
218 ThreadMXBean tmx = ManagementFactory.getThreadMXBean();
219 while (isAlive()) {
220 ThreadInfo ti = tmx.getThreadInfo(getId());
221 if (ti.getThreadState() == state
222 && (want == null || want.equals(ti.getLockName()))) {
223 return;
224 }
225 try {
226 Thread.sleep(1);
227 } catch (InterruptedException e) {
228 }
229 }
230 }
231
232 /**
233 * Waits until {@link TestThread} is in native.
234 */
235 public void waitUntilInNative() {
236 ThreadMXBean tmx = ManagementFactory.getThreadMXBean();
237 while (isAlive()) {
238 ThreadInfo ti = tmx.getThreadInfo(getId());
239 if (ti.isInNative()) {
240 return;
241 }
242 try {
243 Thread.sleep(1);
244 } catch (InterruptedException e) {
245 }
246 }
247 }
248
249 }
|
1 /*
2 * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package jdk.testlibrary;
25
26 import java.util.concurrent.TimeoutException;
27
28 /**
29 * Thread which catches exceptions thrown during the execution
30 * and stores them for later analysis.
31 *
32 * <pre>
33 * {@code
34 * TestThread thread = new TestThread(new XRun() {
35 * public void run() {
36 * // do something
37 * }
38 * });
39 * thread.start();
40 * // do something
41 * Throwable uncaught = thread.getUncaught();
42 * }
43 * </pre>
44 */
45 public class TestThread extends Thread {
184 }
185
186 /**
187 * Waits during {@code timeout} for {@link TestThread} to die
188 * and returns exception caught during the execution.
189 *
190 * @param timeout The time to wait in milliseconds
191 * @return Exception caught during the execution
192 * @throws InterruptedException
193 */
194 public Throwable joinAndReturn(long timeout) throws InterruptedException {
195 join(timeout);
196 if (isAlive()) {
197 return new TimeoutException();
198 }
199 if (uncaught != null) {
200 return uncaught;
201 }
202 return null;
203 }
204 }
|