File tree Expand file tree Collapse file tree 3 files changed +26
-11
lines changed
impl/core/src/main/java/io/serverlessworkflow/impl Expand file tree Collapse file tree 3 files changed +26
-11
lines changed Original file line number Diff line number Diff line change 1717
1818import java .util .concurrent .ExecutorService ;
1919import java .util .concurrent .Executors ;
20+ import java .util .concurrent .locks .Lock ;
21+ import java .util .concurrent .locks .ReentrantLock ;
2022
2123public class DefaultExecutorServiceFactory implements ExecutorServiceFactory {
2224
23- private static final ExecutorServiceFactory instance = new DefaultExecutorServiceFactory ();
25+ private ExecutorService service ;
26+ private Lock serviceLock = new ReentrantLock ();
2427
2528 public static ExecutorServiceFactory instance () {
26- return instance ;
27- }
28-
29- private static class ExecutorServiceHolder {
30- private static ExecutorService instance = Executors .newCachedThreadPool ();
29+ return new DefaultExecutorServiceFactory ();
3130 }
3231
3332 @ Override
3433 public ExecutorService get () {
35- return ExecutorServiceHolder .instance ;
34+ try {
35+ serviceLock .lock ();
36+ if (service == null ) {
37+ service = Executors .newCachedThreadPool ();
38+ }
39+ } finally {
40+ serviceLock .unlock ();
41+ }
42+ return service ;
3643 }
3744
3845 private DefaultExecutorServiceFactory () {}
46+
47+ @ Override
48+ public void close () {
49+ if (service != null ) {
50+ service .shutdown ();
51+ }
52+ }
3953}
Original file line number Diff line number Diff line change 1818import java .util .concurrent .ExecutorService ;
1919import java .util .function .Supplier ;
2020
21- @ FunctionalInterface
22- public interface ExecutorServiceFactory extends Supplier <ExecutorService > {}
21+ public interface ExecutorServiceFactory extends Supplier <ExecutorService >, AutoCloseable {
22+ void close ();
23+ }
Original file line number Diff line number Diff line change 3939import java .util .ServiceLoader .Provider ;
4040import java .util .concurrent .ConcurrentHashMap ;
4141import java .util .concurrent .ExecutorService ;
42- import java .util .concurrent .Executors ;
4342import java .util .stream .Collectors ;
4443
4544public class WorkflowApplication implements AutoCloseable {
@@ -137,7 +136,7 @@ public SchemaValidator getValidator(SchemaInline inline) {
137136 private SchemaValidatorFactory schemaValidatorFactory ;
138137 private WorkflowPositionFactory positionFactory = () -> new QueueWorkflowPosition ();
139138 private WorkflowIdFactory idFactory = () -> UlidCreator .getMonotonicUlid ().toString ();
140- private ExecutorServiceFactory executorFactory = () -> Executors . newCachedThreadPool ();
139+ private ExecutorServiceFactory executorFactory = DefaultExecutorServiceFactory . instance ();
141140 private EventConsumer <?, ?> eventConsumer = InMemoryEvents .get ();
142141 private EventPublisher eventPublisher = InMemoryEvents .get ();
143142 private RuntimeDescriptorFactory descriptorFactory =
@@ -236,6 +235,7 @@ public WorkflowDefinition workflowDefinition(Workflow workflow) {
236235
237236 @ Override
238237 public void close () {
238+ executorFactory .close ();
239239 for (WorkflowDefinition definition : definitions .values ()) {
240240 definition .close ();
241241 }
You can’t perform that action at this time.
0 commit comments