@@ -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 */
14981531public 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
15101541private native int getStateImpl (long threadRef );
0 commit comments