/* * Written by members of JCP JSR-166 Expert Group and released to the * public domain. Use, modify, and redistribute this code in any way * without acknowledgement. Other contributors include Andrew Wright, * Jeffrey Hayes, Pat Fischer, 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 occuring 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 occuring 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(); threadAssertTrue(Thread.interrupted()); } 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(); } } }