Skip to content

Commit b23df14

Browse files
committed
Refactor internals, replace synchronized with ReentrantLock
1 parent 80ffe89 commit b23df14

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

inject/src/main/java/io/avaje/inject/DBeanContextBuilder.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.Map;
1818
import java.util.ServiceLoader;
1919
import java.util.Set;
20+
import java.util.concurrent.locks.ReentrantLock;
2021
import java.util.function.Consumer;
2122

2223
/**
@@ -163,6 +164,7 @@ public void run() {
163164
*/
164165
private static class ShutdownAwareBeanContext implements BeanContext {
165166

167+
private final ReentrantLock lock = new ReentrantLock();
166168
private final BeanContext context;
167169
private final Hook hook;
168170
private boolean shutdown;
@@ -240,21 +242,27 @@ public void start() {
240242

241243
@Override
242244
public void close() {
243-
synchronized (this) {
245+
lock.lock();
246+
try {
244247
if (!shutdown) {
245248
Runtime.getRuntime().removeShutdownHook(hook);
246249
}
247250
context.close();
251+
} finally {
252+
lock.unlock();
248253
}
249254
}
250255

251256
/**
252257
* Close via shutdown hook.
253258
*/
254259
void shutdown() {
255-
synchronized (this) {
260+
lock.lock();
261+
try {
256262
shutdown = true;
257263
close();
264+
} finally {
265+
lock.unlock();
258266
}
259267
}
260268
}

inject/src/main/java/io/avaje/inject/spi/DBeanContext.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@
1111
import java.util.Collections;
1212
import java.util.List;
1313
import java.util.Map;
14+
import java.util.concurrent.locks.ReentrantLock;
1415

1516
class DBeanContext implements BeanContext {
1617

1718
private static final Logger log = LoggerFactory.getLogger(DBeanContext.class);
1819

20+
private final ReentrantLock lock = new ReentrantLock();
21+
1922
private final String name;
2023

2124
private final String[] provides;
@@ -138,7 +141,8 @@ public List<Object> getBeansWithAnnotation(Class<?> annotation) {
138141

139142
@Override
140143
public void start() {
141-
synchronized (this) {
144+
lock.lock();
145+
try {
142146
if (name != null) {
143147
log.debug("firing postConstruct on beans in context:{}", name);
144148
}
@@ -148,12 +152,15 @@ public void start() {
148152
for (BeanContext childContext : children.values()) {
149153
childContext.start();
150154
}
155+
} finally {
156+
lock.unlock();
151157
}
152158
}
153159

154160
@Override
155161
public void close() {
156-
synchronized (this) {
162+
lock.lock();
163+
try {
157164
if (!closed) {
158165
// we only allow one call to preDestroy
159166
closed = true;
@@ -167,6 +174,8 @@ public void close() {
167174
childContext.close();
168175
}
169176
}
177+
} finally {
178+
lock.unlock();
170179
}
171180
}
172181

0 commit comments

Comments
 (0)