提交 ac5f24c8 编写于 作者: D dl

6712185: java/util/concurrent/Executors/AutoShutdown.java fails on slow or busy systems

Reviewed-by: chegar, alanb
上级 81dab89d
...@@ -734,10 +734,6 @@ java/util/concurrent/FutureTask/BlockingTaskExecutor.java generic-all ...@@ -734,10 +734,6 @@ java/util/concurrent/FutureTask/BlockingTaskExecutor.java generic-all
# Problems on windows, jmap.exe hangs? (these run jmap), fails on Solaris 10 x86 # Problems on windows, jmap.exe hangs? (these run jmap), fails on Solaris 10 x86
java/util/concurrent/locks/Lock/TimedAcquireLeak.java generic-all java/util/concurrent/locks/Lock/TimedAcquireLeak.java generic-all
# Solaris sparc client, some failures, "1 not equal to 3"?
# also Linux problems with samevm mode, -server linux i586? 1 not equal to 3?
java/util/concurrent/Executors/AutoShutdown.java generic-all
# Fails on solaris-sparc -server (Set not equal to copy. 1) # Fails on solaris-sparc -server (Set not equal to copy. 1)
java/util/EnumSet/EnumSetBash.java solaris-sparc java/util/EnumSet/EnumSetBash.java solaris-sparc
......
...@@ -32,21 +32,40 @@ import java.io.*; ...@@ -32,21 +32,40 @@ import java.io.*;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import static java.util.concurrent.Executors.*; import static java.util.concurrent.Executors.*;
import java.util.concurrent.Phaser;
public class AutoShutdown { public class AutoShutdown {
private static void waitForFinalizersToRun() throws Throwable { private static void waitForFinalizersToRun() {
System.gc(); System.runFinalization(); Thread.sleep(10); for (int i = 0; i < 2; i++)
System.gc(); System.runFinalization(); Thread.sleep(10); tryWaitForFinalizersToRun();
}
private static void tryWaitForFinalizersToRun() {
System.gc();
final CountDownLatch fin = new CountDownLatch(1);
new Object() { protected void finalize() { fin.countDown(); }};
System.gc();
try { fin.await(); }
catch (InterruptedException ie) { throw new Error(ie); }
} }
private static void realMain(String[] args) throws Throwable { private static void realMain(String[] args) throws Throwable {
Runnable trivialRunnable = new Runnable() { public void run() {}}; final Phaser phaser = new Phaser(3);
Runnable trivialRunnable = new Runnable() {
public void run() {
phaser.arriveAndAwaitAdvance();
}
};
int count0 = Thread.activeCount(); int count0 = Thread.activeCount();
newSingleThreadExecutor().execute(trivialRunnable); Executor e1 = newSingleThreadExecutor();
newSingleThreadExecutor(defaultThreadFactory()).execute(trivialRunnable); Executor e2 = newSingleThreadExecutor(defaultThreadFactory());
Thread.sleep(100); e1.execute(trivialRunnable);
e2.execute(trivialRunnable);
phaser.arriveAndAwaitAdvance();
equal(Thread.activeCount(), count0 + 2); equal(Thread.activeCount(), count0 + 2);
waitForFinalizersToRun(); e1 = e2 = null;
for (int i = 0; i < 10 && Thread.activeCount() > count0; i++)
tryWaitForFinalizersToRun();
equal(Thread.activeCount(), count0); equal(Thread.activeCount(), count0);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册