Skip to content

Commit 809f3ba

Browse files
committed
Use initialization-on-demand holder for OpEnv
1 parent f697cb1 commit 809f3ba

1 file changed

Lines changed: 17 additions & 10 deletions

File tree

scijava-ops-legacy/src/main/java/org/scijava/legacy/service/DefaultOpEnvironmentService.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22
package org.scijava.legacy.service;
33

4-
import org.scijava.app.StatusService;
54
import org.scijava.ops.api.OpEnvironment;
65
import org.scijava.plugin.Attr;
76
import org.scijava.plugin.Parameter;
@@ -14,7 +13,6 @@
1413
import org.scijava.service.Service;
1514
import org.scijava.task.TaskService;
1615

17-
import java.io.ObjectInputFilter;
1816
import java.util.Map;
1917
import java.util.WeakHashMap;
2018

@@ -34,13 +32,8 @@ public class DefaultOpEnvironmentService extends AbstractService implements
3432
@Parameter(required = false)
3533
private TaskService taskService;
3634

37-
private OpEnvironment env;
38-
3935
@Override
4036
public void initialize() {
41-
// Build the Op Environment
42-
env = OpEnvironment.build();
43-
4437
// Set up alias, if ScriptService available
4538
if (scriptService != null) {
4639
scriptService.addAlias(OpEnvironment.class);
@@ -52,10 +45,10 @@ public void initialize() {
5245
}
5346
}
5447

55-
private class SciJavaProgressListener implements ProgressListener {
48+
private static class SciJavaProgressListener implements ProgressListener {
5649

5750
private final Map<Task, org.scijava.task.Task> taskMap;
58-
private TaskService tasks;
51+
private final TaskService tasks;
5952

6053
public SciJavaProgressListener(TaskService tasks) {
6154
this.tasks = tasks;
@@ -79,8 +72,22 @@ public void acknowledgeUpdate(Task task) {
7972
}
8073
}
8174

75+
/**
76+
* A class that lazily loads a static {@link OpEnvironment} using the <a
77+
* href=https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom>Initialization-on-demand
78+
* holder idiom</a>. This solution provides high concurrency, ensuring the
79+
* {@link OpEnvironment} is only constructed once.
80+
*
81+
* @author Gabriel Selzer
82+
*/
83+
private static class OpEnvironmentHolder {
84+
85+
public static final OpEnvironment env = OpEnvironment.build();
86+
}
87+
8288
@Override
8389
public OpEnvironment env() {
84-
return env;
90+
return OpEnvironmentHolder.env;
8591
}
92+
8693
}

0 commit comments

Comments
 (0)