diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
index 7eba28093f44e2726353d11ba69fbce565f500bb..4afea4bf42a6b39b0bcb5a9bea2f6142d999e026 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
@@ -473,19 +473,16 @@ public class H2DatabaseTest extends BrambleTestCase {
 		// Start a transaction
 		Connection txn = db.startTransaction();
 		// In another thread, close the database
-		Thread close = new Thread() {
-			@Override
-			public void run() {
-				try {
-					closing.countDown();
-					db.close();
-					if (!transactionFinished.get()) error.set(true);
-					closed.countDown();
-				} catch (Exception e) {
-					error.set(true);
-				}
+		Thread close = new Thread(() -> {
+			try {
+				closing.countDown();
+				db.close();
+				if (!transactionFinished.get()) error.set(true);
+				closed.countDown();
+			} catch (Exception e) {
+				error.set(true);
 			}
-		};
+		});
 		close.start();
 		closing.await();
 		// Do whatever the transaction needs to do
@@ -510,19 +507,16 @@ public class H2DatabaseTest extends BrambleTestCase {
 		// Start a transaction
 		Connection txn = db.startTransaction();
 		// In another thread, close the database
-		Thread close = new Thread() {
-			@Override
-			public void run() {
-				try {
-					closing.countDown();
-					db.close();
-					if (!transactionFinished.get()) error.set(true);
-					closed.countDown();
-				} catch (Exception e) {
-					error.set(true);
-				}
+		Thread close = new Thread(() -> {
+			try {
+				closing.countDown();
+				db.close();
+				if (!transactionFinished.get()) error.set(true);
+				closed.countDown();
+			} catch (Exception e) {
+				error.set(true);
 			}
-		};
+		});
 		close.start();
 		closing.await();
 		// Do whatever the transaction needs to do
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
index 161e2a26315bf6fd211c32cb8b6f1d7250ff9e86..7c89c0f08ccadd541b5c3fe93e9dfd54bca9fe2c 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
@@ -23,50 +23,44 @@ public class LockFairnessTest extends BrambleTestCase {
 		CountDownLatch secondReaderHasLock = new CountDownLatch(1);
 		CountDownLatch secondReaderHasFinished = new CountDownLatch(1);
 		// First reader
-		Thread first = new Thread() {
-			@Override
-			public void run() {
+		Thread first = new Thread(() -> {
+			try {
+				// Acquire the lock
+				lock.readLock().lock();
 				try {
-					// Acquire the lock
-					lock.readLock().lock();
-					try {
-						// Allow the second reader to acquire the lock
-						firstReaderHasLock.countDown();
-						// Wait for the second reader to acquire the lock
-						assertTrue(secondReaderHasLock.await(10, SECONDS));
-					} finally {
-						// Release the lock
-						lock.readLock().unlock();
-					}
-				} catch (InterruptedException e) {
-					fail();
+					// Allow the second reader to acquire the lock
+					firstReaderHasLock.countDown();
+					// Wait for the second reader to acquire the lock
+					assertTrue(secondReaderHasLock.await(10, SECONDS));
+				} finally {
+					// Release the lock
+					lock.readLock().unlock();
 				}
-				firstReaderHasFinished.countDown();
+			} catch (InterruptedException e) {
+				fail();
 			}
-		};
+			firstReaderHasFinished.countDown();
+		});
 		first.start();
 		// Second reader
-		Thread second = new Thread() {
-			@Override
-			public void run() {
+		Thread second = new Thread(() -> {
+			try {
+				// Wait for the first reader to acquire the lock
+				assertTrue(firstReaderHasLock.await(10, SECONDS));
+				// Acquire the lock
+				lock.readLock().lock();
 				try {
-					// Wait for the first reader to acquire the lock
-					assertTrue(firstReaderHasLock.await(10, SECONDS));
-					// Acquire the lock
-					lock.readLock().lock();
-					try {
-						// Allow the first reader to release the lock
-						secondReaderHasLock.countDown();
-					} finally {
-						// Release the lock
-						lock.readLock().unlock();
-					}
-				} catch (InterruptedException e) {
-					fail();
+					// Allow the first reader to release the lock
+					secondReaderHasLock.countDown();
+				} finally {
+					// Release the lock
+					lock.readLock().unlock();
 				}
-				secondReaderHasFinished.countDown();
+			} catch (InterruptedException e) {
+				fail();
 			}
-		};
+			secondReaderHasFinished.countDown();
+		});
 		second.start();
 		// Wait for both readers to finish
 		assertTrue(firstReaderHasFinished.await(10, SECONDS));
@@ -84,78 +78,69 @@ public class LockFairnessTest extends BrambleTestCase {
 		AtomicBoolean secondReaderHasHeldLock = new AtomicBoolean(false);
 		AtomicBoolean writerHasHeldLock = new AtomicBoolean(false);
 		// First reader
-		Thread first = new Thread() {
-			@Override
-			public void run() {
+		Thread first = new Thread(() -> {
+			try {
+				// Acquire the lock
+				lock.readLock().lock();
 				try {
-					// Acquire the lock
-					lock.readLock().lock();
-					try {
-						// Allow the other threads to acquire the lock
-						firstReaderHasLock.countDown();
-						// Wait for both other threads to wait for the lock
-						while (lock.getQueueLength() < 2) Thread.sleep(10);
-						// No other thread should have acquired the lock
-						assertFalse(secondReaderHasHeldLock.get());
-						assertFalse(writerHasHeldLock.get());
-					} finally {
-						// Release the lock
-						lock.readLock().unlock();
-					}
-				} catch (InterruptedException e) {
-					fail();
+					// Allow the other threads to acquire the lock
+					firstReaderHasLock.countDown();
+					// Wait for both other threads to wait for the lock
+					while (lock.getQueueLength() < 2) Thread.sleep(10);
+					// No other thread should have acquired the lock
+					assertFalse(secondReaderHasHeldLock.get());
+					assertFalse(writerHasHeldLock.get());
+				} finally {
+					// Release the lock
+					lock.readLock().unlock();
 				}
-				firstReaderHasFinished.countDown();
+			} catch (InterruptedException e) {
+				fail();
 			}
-		};
+			firstReaderHasFinished.countDown();
+		});
 		first.start();
 		// Writer
-		Thread writer = new Thread() {
-			@Override
-			public void run() {
+		Thread writer = new Thread(() -> {
+			try {
+				// Wait for the first reader to acquire the lock
+				assertTrue(firstReaderHasLock.await(10, SECONDS));
+				// Acquire the lock
+				lock.writeLock().lock();
 				try {
-					// Wait for the first reader to acquire the lock
-					assertTrue(firstReaderHasLock.await(10, SECONDS));
-					// Acquire the lock
-					lock.writeLock().lock();
-					try {
-						writerHasHeldLock.set(true);
-						// The second reader should not overtake the writer
-						assertFalse(secondReaderHasHeldLock.get());
-					} finally {
-						lock.writeLock().unlock();
-					}
-				} catch (InterruptedException e) {
-					fail();
+					writerHasHeldLock.set(true);
+					// The second reader should not overtake the writer
+					assertFalse(secondReaderHasHeldLock.get());
+				} finally {
+					lock.writeLock().unlock();
 				}
-				writerHasFinished.countDown();
+			} catch (InterruptedException e) {
+				fail();
 			}
-		};
+			writerHasFinished.countDown();
+		});
 		writer.start();
 		// Second reader
-		Thread second = new Thread() {
-			@Override
-			public void run() {
+		Thread second = new Thread(() -> {
+			try {
+				// Wait for the first reader to acquire the lock
+				assertTrue(firstReaderHasLock.await(10, SECONDS));
+				// Wait for the writer to wait for the lock
+				while (lock.getQueueLength() < 1) Thread.sleep(10);
+				// Acquire the lock
+				lock.readLock().lock();
 				try {
-					// Wait for the first reader to acquire the lock
-					assertTrue(firstReaderHasLock.await(10, SECONDS));
-					// Wait for the writer to wait for the lock
-					while (lock.getQueueLength() < 1) Thread.sleep(10);
-					// Acquire the lock
-					lock.readLock().lock();
-					try {
-						secondReaderHasHeldLock.set(true);
-						// The second reader should not overtake the writer
-						assertTrue(writerHasHeldLock.get());
-					} finally {
-						lock.readLock().unlock();
-					}
-				} catch (InterruptedException e) {
-					fail();
+					secondReaderHasHeldLock.set(true);
+					// The second reader should not overtake the writer
+					assertTrue(writerHasHeldLock.get());
+				} finally {
+					lock.readLock().unlock();
 				}
-				secondReaderHasFinished.countDown();
+			} catch (InterruptedException e) {
+				fail();
 			}
-		};
+			secondReaderHasFinished.countDown();
+		});
 		second.start();
 		// Wait for all the threads to finish
 		assertTrue(firstReaderHasFinished.await(10, SECONDS));