提交 bae21de3 编写于 作者: I igerasim

7181748: java/lang/ThreadGroup/Suspend.java test fails intermittently

Reviewed-by: chegar, dholmes
上级 345ff4eb
/* /*
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,47 +23,55 @@ ...@@ -23,47 +23,55 @@
/** /**
* @test * @test
* @bug 4176355 * @bug 4176355 7181748
* @summary Suspending a ThreadGroup that contains the current thread has * @summary Suspending a ThreadGroup that contains the current thread has
* unpredictable results. * unpredictable results.
*/ */
public class Suspend implements Runnable { public class Suspend implements Runnable {
private static Thread first=null;
private static Thread second=null;
private static ThreadGroup group = new ThreadGroup("");
private static int count = 0;
Suspend() { private static volatile int count = 0;
Thread thread = new Thread(group, this); private static final ThreadGroup group = new ThreadGroup("");
if (first == null) private static final Thread first = new Thread(group, new Suspend());
first = thread; private static final Thread second = new Thread(group, new Suspend());
else
second = thread;
thread.start();
}
public void run() { public void run() {
while (true) { while (true) {
try { try {
Thread.sleep(1000); // Give other thread a chance to start Thread.sleep(100);
if (Thread.currentThread() == first) if (Thread.currentThread() == first) {
group.suspend(); if (second.isAlive()) {
else group.suspend();
}
} else {
count++; count++;
} catch(InterruptedException e){ }
} catch (InterruptedException e) {
} }
} }
} }
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
for (int i=0; i<2; i++) // Launch two threads as part of the same thread group
new Suspend(); first.start();
Thread.sleep(3000); second.start();
// Wait for the thread group suspend to be issued
while (!first.isAlive() || !second.isAlive()) {
Thread.sleep(100);
}
Thread.sleep(1000);
// Suppose, the thread group is now suspended
count = 0;
Thread.sleep(1000);
// Increment of the count indicates that the second thread is still running
boolean failed = (count > 1); boolean failed = (count > 1);
first.stop(); second.stop(); first.stop();
if (failed) second.stop();
if (failed) {
throw new RuntimeException("Failure."); throw new RuntimeException("Failure.");
}
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册