diff --git a/src/test/java/org/caosdb/server/database/DatabaseAccessManagerTest.java b/src/test/java/org/caosdb/server/database/DatabaseAccessManagerTest.java index f03817ff29aedfce521d07a3fe8024f0abc3a5d3..0ba085b1fd050578b50e443613f82167890ea61f 100644 --- a/src/test/java/org/caosdb/server/database/DatabaseAccessManagerTest.java +++ b/src/test/java/org/caosdb/server/database/DatabaseAccessManagerTest.java @@ -30,10 +30,7 @@ import org.junit.Assert; import org.junit.Test; public class DatabaseAccessManagerTest { - public static final ReadAccessSemaphore readAccess = new ReadAccessSemaphore(); - public static final WriteAccessLock writeAccess = new WriteAccessLock(readAccess); - - Thread createReadThread(long wait, String name) { + Thread createReadThread(long wait, String name, ReadAccessSemaphore readAccess) { return new Thread( new Runnable() { @@ -47,13 +44,12 @@ public class DatabaseAccessManagerTest { } finally { readAccess.release(); } - System.out.println(Thread.currentThread().getName() + " terminated"); } }, name); } - Thread createWriteThread(long wait, String name) { + Thread createWriteThread(long wait, String name, WriteAccessLock writeAccess) { return new Thread( new Runnable() { @@ -69,7 +65,6 @@ public class DatabaseAccessManagerTest { } finally { writeAccess.release(); } - System.out.println(Thread.currentThread().getName() + " terminated"); } }, name); @@ -77,15 +72,17 @@ public class DatabaseAccessManagerTest { @Test public void testDeadLock() throws InterruptedException { + final ReadAccessSemaphore readAccess = new ReadAccessSemaphore(); + final WriteAccessLock writeAccess = new WriteAccessLock(readAccess); List<Thread> ts = new LinkedList<>(); for (int i = 0; i < 1000; i++) { - Thread t1 = createReadThread(1, "Ra" + i); - Thread t2 = createReadThread(2, "Rb" + i); - Thread t3 = createReadThread(3, "Rc" + i); - Thread t5 = createReadThread(5, "Rd" + i); - Thread t7 = createReadThread(7, "Re" + i); - Thread t11 = createReadThread(11, "Rf" + i); - Thread w5 = createWriteThread(2, "W" + i); + Thread t1 = createReadThread(1, "Ra" + i, readAccess); + Thread t2 = createReadThread(2, "Rb" + i, readAccess); + Thread t3 = createReadThread(3, "Rc" + i, readAccess); + Thread t5 = createReadThread(5, "Rd" + i, readAccess); + Thread t7 = createReadThread(7, "Re" + i, readAccess); + Thread t11 = createReadThread(11, "Rf" + i, readAccess); + Thread w5 = createWriteThread(2, "W" + i, writeAccess); t1.start(); t2.start(); @@ -105,13 +102,14 @@ public class DatabaseAccessManagerTest { } for (Thread t : ts) { - t.join(); - } - for (Thread t : ts) { + t.join(10000); assertFalse(t.isAlive()); } } + public static final ReadAccessSemaphore readAccess = new ReadAccessSemaphore(); + public static final WriteAccessLock writeAccess = new WriteAccessLock(readAccess); + /** * Two read-, two write-threads. The read-threads request read access, the write-threads request * write access.<br>