blob: b074a20e94773d6f79487ca7301cd2be962d09a1 [file] [log] [blame]
/*
* 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 java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.locks.*;
public class LockSupportTest extends JSR166TestCase{
public static void main(String[] args) {
junit.textui.TestRunner.run (suite());
}
public static Test suite() {
return new TestSuite(LockSupportTest.class);
}
/**
* park is released by unpark occurring after park
*/
public void testPark() {
Thread t = new Thread(new Runnable() {
public void run() {
try {
LockSupport.park();
} catch(Exception e){
threadUnexpectedException();
}
}
});
try {
t.start();
Thread.sleep(SHORT_DELAY_MS);
LockSupport.unpark(t);
t.join();
}
catch(Exception e) {
unexpectedException();
}
}
/**
* park is released by unpark occurring before park
*/
public void testPark2() {
Thread t = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(SHORT_DELAY_MS);
LockSupport.park();
} catch(Exception e){
threadUnexpectedException();
}
}
});
try {
t.start();
LockSupport.unpark(t);
t.join();
}
catch(Exception e) {
unexpectedException();
}
}
/**
* park is released by interrupt
*/
public void testPark3() {
Thread t = new Thread(new Runnable() {
public void run() {
try {
LockSupport.park();
} catch(Exception e){
threadUnexpectedException();
}
}
});
try {
t.start();
Thread.sleep(SHORT_DELAY_MS);
t.interrupt();
t.join();
}
catch(Exception e) {
unexpectedException();
}
}
/**
* park returns if interrupted before park
*/
public void testPark4() {
final ReentrantLock lock = new ReentrantLock();
lock.lock();
Thread t = new Thread(new Runnable() {
public void run() {
try {
lock.lock();
LockSupport.park();
} catch(Exception e){
threadUnexpectedException();
}
}
});
try {
t.start();
t.interrupt();
lock.unlock();
t.join();
}
catch(Exception e) {
unexpectedException();
}
}
/**
* parkNanos times out if not unparked
*/
public void testParkNanos() {
Thread t = new Thread(new Runnable() {
public void run() {
try {
LockSupport.parkNanos(1000);
} catch(Exception e){
threadUnexpectedException();
}
}
});
try {
t.start();
t.join();
}
catch(Exception e) {
unexpectedException();
}
}
/**
* parkUntil times out if not unparked
*/
public void testParkUntil() {
Thread t = new Thread(new Runnable() {
public void run() {
try {
long d = new Date().getTime() + 100;
LockSupport.parkUntil(d);
} catch(Exception e){
threadUnexpectedException();
}
}
});
try {
t.start();
t.join();
}
catch(Exception e) {
unexpectedException();
}
}
}