Skip to content

Commit 4027928

Browse files
Implement Lock and ReentrantLock APIs in vm/JavaAPI
- Added `java.util.concurrent.locks.Lock` interface. - Added `java.util.concurrent.locks.ReentrantLock` implementation. - Added `java.util.concurrent.locks.Condition` interface. - Added `java.util.concurrent.TimeUnit` enum. - Updated `java.lang.Thread` with `interrupt0`, `sleep`, `join` support. - Added `LockIntegrationTest` in `vm/tests` to verify bytecode translation of new APIs. - Fixed spin loop in `ReentrantLock.lock()` when interrupted. - Fixed integration test setup to avoid conflicting native stubs.
1 parent bfccc5a commit 4027928

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

vm/JavaAPI/src/java/util/concurrent/locks/ReentrantLock.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,19 @@ public void lock() {
2323
holdCount++;
2424
return;
2525
}
26+
boolean interrupted = false;
2627
while (owner != null) {
2728
try {
2829
sync.wait();
2930
} catch (InterruptedException e) {
30-
Thread.currentThread().interrupt();
31+
interrupted = true;
3132
}
3233
}
3334
owner = current;
3435
holdCount = 1;
36+
if (interrupted) {
37+
Thread.currentThread().interrupt();
38+
}
3539
}
3640
}
3741

vm/tests/src/test/java/com/codename1/tools/translator/LockIntegrationTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,12 @@ private void writeMockJavaClasses(Path sourceDir) throws Exception {
199199
// java.util.Date
200200
Files.write(util.resolve("Date.java"), "package java.util; public class Date { public long getTime() { return 0; } }".getBytes(StandardCharsets.UTF_8));
201201

202+
// java.util.Objects
203+
Files.write(util.resolve("Objects.java"), ("package java.util;\n" +
204+
"public class Objects {\n" +
205+
" public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; }\n" +
206+
"}\n").getBytes(StandardCharsets.UTF_8));
207+
202208
// java.util.concurrent.TimeUnit
203209
Files.write(concurrent.resolve("TimeUnit.java"), ("package java.util.concurrent;\n" +
204210
"public class TimeUnit {\n" +

0 commit comments

Comments
 (0)