1 32 package net.sf.retrotranslator.runtime.java.lang; 33 34 import net.sf.retrotranslator.runtime.impl.WeakIdentityTable; 35 36 39 public class _Thread { 40 41 private static final StackTraceElement [] EMPTY_STACK_TRACE = new StackTraceElement [0]; 42 43 private static final WeakIdentityTable<Thread , _Thread> threads = 44 new WeakIdentityTable<Thread , _Thread>() { 45 protected _Thread initialValue() { 46 return new _Thread(); 47 } 48 }; 49 50 private static long lastId; 51 52 private volatile long id; 53 54 public static StackTraceElement [] getStackTrace(Thread thread) { 55 return thread == Thread.currentThread() ? getStackTrace() : EMPTY_STACK_TRACE; 56 } 57 58 public static long getId(Thread thread) { 59 return threads.obtain(thread).getId(); 60 } 61 62 private static StackTraceElement [] getStackTrace() { 63 return new Throwable ().getStackTrace(); 64 } 65 66 private long getId() { 67 if (id == 0) { 68 synchronized (threads) { 69 while (id == 0) { 70 id = ++lastId; 71 } 72 } 73 } 74 return id; 75 } 76 77 } 78 | Popular Tags |