executorstest.java
来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 667 行 · 第 1/2 页
JAVA
667 行
/*
* Written by Doug Lea with assistance from members of JCP JSR-166
* Expert Group and released to the public domain, as explained at
* http://creativecommons.org/licenses/publicdomain
* Other contributors include Andrew Wright, Jeffrey Hayes,
* Pat Fisher, Mike Judd.
*/
import junit.framework.*;
import edu.emory.mathcs.backport.java.util.*;
import edu.emory.mathcs.backport.java.util.concurrent.*;
import java.math.BigInteger;
import java.security.*;
import java.util.*;
public class ExecutorsTest extends JSR166TestCase{
public static void main(String[] args) {
junit.textui.TestRunner.run (suite());
}
public static Test suite() {
return new TestSuite(ExecutorsTest.class);
}
static class TimedCallable implements Callable {
private final ExecutorService exec;
private final Callable func;
private final long msecs;
TimedCallable(ExecutorService exec, Callable func, long msecs) {
this.exec = exec;
this.func = func;
this.msecs = msecs;
}
public Object call() throws Exception {
Future ftask = exec.submit(func);
try {
return ftask.get(msecs, TimeUnit.MILLISECONDS);
} finally {
ftask.cancel(true);
}
}
}
private static class Fib implements Callable {
private final BigInteger n;
Fib(long n) {
if (n < 0) throw new IllegalArgumentException("need non-negative arg, but got " + n);
this.n = BigInteger.valueOf(n);
}
public Object call() {
BigInteger f1 = BigInteger.ONE;
BigInteger f2 = f1;
for (BigInteger i = BigInteger.ZERO; i.compareTo(n) < 0; i = i.add(BigInteger.ONE)) {
BigInteger t = f1.add(f2);
f1 = f2;
f2 = t;
}
return f1;
}
};
/**
* A newCachedThreadPool can execute runnables
*/
public void testNewCachedThreadPool1() {
ExecutorService e = Executors.newCachedThreadPool();
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
}
/**
* A newCachedThreadPool with given ThreadFactory can execute runnables
*/
public void testNewCachedThreadPool2() {
ExecutorService e = Executors.newCachedThreadPool(new SimpleThreadFactory());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
}
/**
* A newCachedThreadPool with null ThreadFactory throws NPE
*/
public void testNewCachedThreadPool3() {
try {
ExecutorService e = Executors.newCachedThreadPool(null);
shouldThrow();
}
catch(NullPointerException success) {
}
}
/**
* A new SingleThreadExecutor can execute runnables
*/
public void testNewSingleThreadExecutor1() {
ExecutorService e = Executors.newSingleThreadExecutor();
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
}
/**
* A new SingleThreadExecutor with given ThreadFactory can execute runnables
*/
public void testNewSingleThreadExecutor2() {
ExecutorService e = Executors.newSingleThreadExecutor(new SimpleThreadFactory());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
}
/**
* A new SingleThreadExecutor with null ThreadFactory throws NPE
*/
public void testNewSingleThreadExecutor3() {
try {
ExecutorService e = Executors.newSingleThreadExecutor(null);
shouldThrow();
}
catch(NullPointerException success) {
}
}
/**
* A new SingleThreadExecutor cannot be casted to concrete implementation
*/
public void testCastNewSingleThreadExecutor() {
ExecutorService e = Executors.newSingleThreadExecutor();
try {
ThreadPoolExecutor tpe = (ThreadPoolExecutor)e;
} catch (ClassCastException success) {
} finally {
joinPool(e);
}
}
/**
* A new newFixedThreadPool can execute runnables
*/
public void testNewFixedThreadPool1() {
ExecutorService e = Executors.newFixedThreadPool(2);
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
}
/**
* A new newFixedThreadPool with given ThreadFactory can execute runnables
*/
public void testNewFixedThreadPool2() {
ExecutorService e = Executors.newFixedThreadPool(2, new SimpleThreadFactory());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
}
/**
* A new newFixedThreadPool with null ThreadFactory throws NPE
*/
public void testNewFixedThreadPool3() {
try {
ExecutorService e = Executors.newFixedThreadPool(2, null);
shouldThrow();
}
catch(NullPointerException success) {
}
}
/**
* A new newFixedThreadPool with 0 threads throws IAE
*/
public void testNewFixedThreadPool4() {
try {
ExecutorService e = Executors.newFixedThreadPool(0);
shouldThrow();
}
catch(IllegalArgumentException success) {
}
}
/**
* An unconfigurable newFixedThreadPool can execute runnables
*/
public void testunconfigurableExecutorService() {
ExecutorService e = Executors.unconfigurableExecutorService(Executors.newFixedThreadPool(2));
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
}
/**
* unconfigurableExecutorService(null) throws NPE
*/
public void testunconfigurableExecutorServiceNPE() {
try {
ExecutorService e = Executors.unconfigurableExecutorService(null);
}
catch (NullPointerException success) {
}
}
/**
* unconfigurableScheduledExecutorService(null) throws NPE
*/
public void testunconfigurableScheduledExecutorServiceNPE() {
try {
ExecutorService e = Executors.unconfigurableScheduledExecutorService(null);
}
catch (NullPointerException success) {
}
}
/**
* a newSingleThreadScheduledExecutor successfully runs delayed task
*/
public void testNewSingleThreadScheduledExecutor() {
try {
TrackedCallable callable = new TrackedCallable();
ScheduledExecutorService p1 = Executors.newSingleThreadScheduledExecutor();
Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
assertFalse(callable.done);
Thread.sleep(MEDIUM_DELAY_MS);
assertTrue(callable.done);
assertEquals(Boolean.TRUE, f.get());
joinPool(p1);
} catch(RejectedExecutionException e){}
catch(Exception e){
e.printStackTrace();
unexpectedException();
}
}
/**
* a newScheduledThreadPool successfully runs delayed task
*/
public void testnewScheduledThreadPool() {
try {
TrackedCallable callable = new TrackedCallable();
ScheduledExecutorService p1 = Executors.newScheduledThreadPool(2);
Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
assertFalse(callable.done);
Thread.sleep(MEDIUM_DELAY_MS);
assertTrue(callable.done);
assertEquals(Boolean.TRUE, f.get());
joinPool(p1);
} catch(RejectedExecutionException e){}
catch(Exception e){
e.printStackTrace();
unexpectedException();
}
}
/**
* an unconfigurable newScheduledThreadPool successfully runs delayed task
*/
public void testunconfigurableScheduledExecutorService() {
try {
TrackedCallable callable = new TrackedCallable();
ScheduledExecutorService p1 = Executors.unconfigurableScheduledExecutorService(Executors.newScheduledThreadPool(2));
Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
assertFalse(callable.done);
Thread.sleep(MEDIUM_DELAY_MS);
assertTrue(callable.done);
assertEquals(Boolean.TRUE, f.get());
joinPool(p1);
} catch(RejectedExecutionException e){}
catch(Exception e){
e.printStackTrace();
unexpectedException();
}
}
/**
* timeouts from execute will time out if they compute too long.
*/
public void testTimedCallable() {
int N = 10000;
ExecutorService executor = Executors.newSingleThreadExecutor();
List tasks = new ArrayList(N);
try {
long startTime = System.currentTimeMillis();
long i = 0;
while (tasks.size() < N) {
tasks.add(new TimedCallable(executor, new Fib(i), 1));
i += 10;
}
int iters = 0;
BigInteger sum = BigInteger.ZERO;
for (Iterator it = tasks.iterator(); it.hasNext();) {
try {
++iters;
sum = sum.add((BigInteger)((Callable)it.next()).call());
}
catch (TimeoutException success) {
assertTrue(iters > 0);
return;
}
catch (Exception e) {
unexpectedException();
}
}
// if by chance we didn't ever time out, total time must be small
long elapsed = System.currentTimeMillis() - startTime;
assertTrue(elapsed < N);
}
finally {
joinPool(executor);
}
}
/**
* ThreadPoolExecutor using defaultThreadFactory has
* specified group, priority, daemon status, and name
*/
public void testDefaultThreadFactory() {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?