Skip to content

Commit c0bf4b4

Browse files
committed
[api] Replace double-check singlton with lazy initialization (#2826)
1 parent 4c4a6c4 commit c0bf4b4

File tree

12 files changed

+50
-77
lines changed

12 files changed

+50
-77
lines changed

engines/ml/lightgbm/src/main/java/ai/djl/ml/lightgbm/LgbmEngineProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
/** {@code LgbmEngineProvider} is the LightGBM implementation of {@link EngineProvider}. */
1919
public class LgbmEngineProvider implements EngineProvider {
2020

21-
private static volatile Engine engine; // NOPMD
22-
2321
/** {@inheritDoc} */
2422
@Override
2523
public String getEngineName() {
@@ -35,11 +33,10 @@ public int getEngineRank() {
3533
/** {@inheritDoc} */
3634
@Override
3735
public Engine getEngine() {
38-
if (engine == null) {
39-
synchronized (LgbmEngineProvider.class) {
40-
engine = LgbmEngine.newInstance();
41-
}
42-
}
43-
return engine;
36+
return InstanceHolder.INSTANCE;
37+
}
38+
39+
private static class InstanceHolder {
40+
static final Engine INSTANCE = LgbmEngine.newInstance();
4441
}
4542
}

engines/ml/xgboost/src/main/java/ai/djl/ml/xgboost/XgbEngineProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
/** {@code XgbEngineProvider} is the XGBoost implementation of {@link EngineProvider}. */
1919
public class XgbEngineProvider implements EngineProvider {
2020

21-
private static volatile Engine engine; // NOPMD
22-
2321
/** {@inheritDoc} */
2422
@Override
2523
public String getEngineName() {
@@ -35,11 +33,10 @@ public int getEngineRank() {
3533
/** {@inheritDoc} */
3634
@Override
3735
public Engine getEngine() {
38-
if (engine == null) {
39-
synchronized (XgbEngineProvider.class) {
40-
engine = XgbEngine.newInstance();
41-
}
42-
}
43-
return engine;
36+
return InstanceHolder.INSTANCE;
37+
}
38+
39+
private static class InstanceHolder {
40+
static final Engine INSTANCE = XgbEngine.newInstance();
4441
}
4542
}

engines/mxnet/mxnet-engine/src/main/java/ai/djl/mxnet/engine/MxEngineProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
/** {@code MxEngineProvider} is the MXNet implementation of {@link EngineProvider}. */
1919
public class MxEngineProvider implements EngineProvider {
2020

21-
private static volatile Engine engine; // NOPMD
22-
2321
/** {@inheritDoc} */
2422
@Override
2523
public String getEngineName() {
@@ -35,11 +33,10 @@ public int getEngineRank() {
3533
/** {@inheritDoc} */
3634
@Override
3735
public Engine getEngine() {
38-
if (engine == null) {
39-
synchronized (MxEngineProvider.class) {
40-
engine = MxEngine.newInstance();
41-
}
42-
}
43-
return engine;
36+
return InstanceHolder.INSTANCE;
37+
}
38+
39+
private static class InstanceHolder {
40+
static final Engine INSTANCE = MxEngine.newInstance();
4441
}
4542
}

engines/onnxruntime/onnxruntime-engine/src/main/java/ai/djl/onnxruntime/engine/OrtEngineProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
/** {@code OrtEngineProvider} is the ONNX Runtime implementation of {@link EngineProvider}. */
1919
public class OrtEngineProvider implements EngineProvider {
2020

21-
private static volatile Engine engine; // NOPMD
22-
2321
/** {@inheritDoc} */
2422
@Override
2523
public String getEngineName() {
@@ -35,11 +33,10 @@ public int getEngineRank() {
3533
/** {@inheritDoc} */
3634
@Override
3735
public Engine getEngine() {
38-
if (engine == null) {
39-
synchronized (OrtEngineProvider.class) {
40-
engine = OrtEngine.newInstance();
41-
}
42-
}
43-
return engine;
36+
return InstanceHolder.INSTANCE;
37+
}
38+
39+
private static class InstanceHolder {
40+
static final Engine INSTANCE = OrtEngine.newInstance();
4441
}
4542
}

engines/paddlepaddle/paddlepaddle-engine/src/main/java/ai/djl/paddlepaddle/engine/PpEngineProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
/** {@code PpEngineProvider} is the PaddlePaddle implementation of {@link EngineProvider}. */
1919
public class PpEngineProvider implements EngineProvider {
2020

21-
private static volatile Engine engine; // NOPMD
22-
2321
/** {@inheritDoc} */
2422
@Override
2523
public String getEngineName() {
@@ -35,11 +33,10 @@ public int getEngineRank() {
3533
/** {@inheritDoc} */
3634
@Override
3735
public Engine getEngine() {
38-
if (engine == null) {
39-
synchronized (PpEngineProvider.class) {
40-
engine = PpEngine.newInstance();
41-
}
42-
}
43-
return engine;
36+
return InstanceHolder.INSTANCE;
37+
}
38+
39+
private static class InstanceHolder {
40+
static final Engine INSTANCE = PpEngine.newInstance();
4441
}
4542
}

engines/pytorch/pytorch-engine/src/main/java/ai/djl/pytorch/engine/PtEngineProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
/** {@code PtEngineProvider} is the PyTorch implementation of {@link EngineProvider}. */
1919
public class PtEngineProvider implements EngineProvider {
2020

21-
private static volatile Engine engine; // NOPMD
22-
2321
/** {@inheritDoc} */
2422
@Override
2523
public String getEngineName() {
@@ -35,11 +33,10 @@ public int getEngineRank() {
3533
/** {@inheritDoc} */
3634
@Override
3735
public Engine getEngine() {
38-
if (engine == null) {
39-
synchronized (PtEngineProvider.class) {
40-
engine = PtEngine.newInstance();
41-
}
42-
}
43-
return engine;
36+
return InstanceHolder.INSTANCE;
37+
}
38+
39+
private static class InstanceHolder {
40+
static final Engine INSTANCE = PtEngine.newInstance();
4441
}
4542
}

engines/tensorflow/tensorflow-engine/src/main/java/ai/djl/tensorflow/engine/TfEngineProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
/** {@code TfEngineProvider} is the TensorFlow implementation of {@link EngineProvider}. */
1919
public class TfEngineProvider implements EngineProvider {
2020

21-
private static volatile Engine engine; // NOPMD
22-
2321
/** {@inheritDoc} */
2422
@Override
2523
public String getEngineName() {
@@ -35,11 +33,10 @@ public int getEngineRank() {
3533
/** {@inheritDoc} */
3634
@Override
3735
public Engine getEngine() {
38-
if (engine == null) {
39-
synchronized (TfEngineProvider.class) {
40-
engine = TfEngine.newInstance();
41-
}
42-
}
43-
return engine;
36+
return InstanceHolder.INSTANCE;
37+
}
38+
39+
private static class InstanceHolder {
40+
static final Engine INSTANCE = TfEngine.newInstance();
4441
}
4542
}

engines/tensorrt/src/main/java/ai/djl/tensorrt/engine/TrtEngineProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
/** {@code TrtEngineProvider} is the TensorRT implementation of {@link EngineProvider}. */
1919
public class TrtEngineProvider implements EngineProvider {
2020

21-
private static volatile Engine engine; // NOPMD
22-
2321
/** {@inheritDoc} */
2422
@Override
2523
public String getEngineName() {
@@ -35,11 +33,10 @@ public int getEngineRank() {
3533
/** {@inheritDoc} */
3634
@Override
3735
public Engine getEngine() {
38-
if (engine == null) {
39-
synchronized (TrtEngineProvider.class) {
40-
engine = TrtEngine.newInstance();
41-
}
42-
}
43-
return engine;
36+
return InstanceHolder.INSTANCE;
37+
}
38+
39+
private static class InstanceHolder {
40+
static final Engine INSTANCE = TrtEngine.newInstance();
4441
}
4542
}

engines/tensorrt/src/test/java/ai/djl/tensorrt/engine/TrtEngineTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void getVersion() {
2626
try {
2727
Engine engine = Engine.getEngine("TensorRT");
2828
version = engine.getVersion();
29-
} catch (Exception ignore) {
29+
} catch (Throwable ignore) {
3030
throw new SkipException("Your os configuration doesn't support TensorRT.");
3131
}
3232
Assert.assertEquals(version, "8.4.1");

engines/tensorrt/src/test/java/ai/djl/tensorrt/engine/TrtNDManagerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void testNDArray() {
2828
Engine engine;
2929
try {
3030
engine = Engine.getEngine("TensorRT");
31-
} catch (Exception ignore) {
31+
} catch (Throwable ignore) {
3232
throw new SkipException("Your os configuration doesn't support TensorRT.");
3333
}
3434
if (!engine.defaultDevice().isGpu()) {

0 commit comments

Comments
 (0)