Skip to content

Commit 2bd8105

Browse files
committed
Add JCL support for Java8-17
Signed-off-by: Jack Lu <Jack.S.Lu@ibm.com>
1 parent fbafa83 commit 2bd8105

File tree

1 file changed

+37
-6
lines changed

1 file changed

+37
-6
lines changed

jcl/src/java.base/share/classes/java/lang/Thread.java

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ private static final class TidLock {
9898
private String name; // The Thread's name
9999
private int priority = NORM_PRIORITY; // The Thread's current priority
100100
private boolean isDaemon; // Tells if the Thread is a daemon thread or not.
101+
private volatile int threadStatus; // The Thread's state.
101102

102103
ThreadGroup group; // A Thread belongs to exactly one ThreadGroup
103104
private Runnable runnable; // Target (optional) runnable object
@@ -1488,6 +1489,38 @@ public static enum State {
14881489
*/
14891490
TERMINATED }
14901491

1492+
/**
1493+
* Returns the translation from a J9VMThread state to a Thread::State.
1494+
*
1495+
* @return this thread's state.
1496+
*
1497+
* @see State
1498+
*/
1499+
private State translateJ9VMThreadStateToThreadState(int status) {
1500+
switch (status) {
1501+
case 1: // J9VMTHREAD_STATE_RUNNING
1502+
return State.RUNNABLE;
1503+
case 2: // J9VMTHREAD_STATE_BLOCKED
1504+
return State.BLOCKED;
1505+
case 4: // J9VMTHREAD_STATE_WAITING
1506+
case 0x80: // J9VMTHREAD_STATE_PARKED
1507+
return State.WAITING;
1508+
case 8: // J9VMTHREAD_STATE_SLEEPING
1509+
case 64: // J9VMTHREAD_STATE_WAITING_TIMED
1510+
case 0x100: // J9VMTHREAD_STATE_PARKED_TIMED
1511+
return State.TIMED_WAITING;
1512+
case 32: // J9VMTHREAD_STATE_DEAD
1513+
return State.TERMINATED;
1514+
default:
1515+
synchronized (lock) {
1516+
if (threadRef == NO_REF) {
1517+
return State.TERMINATED;
1518+
}
1519+
return State.values()[getStateImpl(threadRef)];
1520+
}
1521+
}
1522+
}
1523+
14911524
/**
14921525
* Returns the current Thread state.
14931526
*
@@ -1496,15 +1529,13 @@ public static enum State {
14961529
* @see State
14971530
*/
14981531
public State getState() {
1499-
synchronized(lock) {
1532+
if (started) {
15001533
if (threadRef == NO_REF) {
1501-
if (isDead()) {
1502-
return State.TERMINATED;
1503-
}
1504-
return State.NEW;
1534+
return State.TERMINATED;
15051535
}
1506-
return State.values()[getStateImpl(threadRef)];
1536+
return translateJ9VMThreadStateToThreadState(threadStatus);
15071537
}
1538+
return State.NEW;
15081539
}
15091540

15101541
private native int getStateImpl(long threadRef);

0 commit comments

Comments
 (0)