diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
index d7cda14..d6ea9d4 100644
--- oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
@@ -22,6 +22,7 @@ import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerM
 import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerObserver;
 import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.scheduleWithFixedDelay;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -138,6 +139,9 @@ public class Oak {
 
     private Executor executor;
 
+    private final Closer closer = Closer.create();
+
+
     /**
      * Default {@code ScheduledExecutorService} used for scheduling background tasks.
      * This default spawns up to 32 background thread on an as need basis. Idle
@@ -195,13 +199,16 @@ public class Oak {
     private synchronized ScheduledExecutorService getScheduledExecutor() {
         if (scheduledExecutor == null) {
             scheduledExecutor = defaultScheduledExecutor();
+            closer.register(new CloseableExecutor(scheduledExecutor));
         }
         return scheduledExecutor;
     }
 
     private synchronized Executor getExecutor() {
         if (executor == null) {
-            executor = defaultExecutorService();
+            ExecutorService executorService = defaultExecutorService();
+            executor = executorService;
+            closer.register(new CloseableExecutor(executorService));
         }
         return executor;
     }
@@ -585,6 +592,7 @@ public class Oak {
             public void close() throws IOException {
                 super.close();
                 new CompositeRegistration(regs).unregister();
+                closer.close();
             }
         };
     }
@@ -637,4 +645,17 @@ public class Oak {
         return createContentSession().getLatestRoot();
     }
 
+    private static class CloseableExecutor implements Closeable {
+        final ExecutorService executorService;
+
+        private CloseableExecutor(ExecutorService executorService) {
+            this.executorService = executorService;
+        }
+
+        @Override
+        public void close() throws IOException {
+            executorService.shutdown();
+        }
+    }
+
 }
