package com.stardust.lang;
import java.lang.ref.WeakReference;
import java.util.Hashtable;
import java.util.WeakHashMap;
/**
* Created by Stardust on 2017/4/30.
*/
public class ThreadCompat extends Thread {
private static volatile WeakHashMap<Thread, Boolean> interruptStatus = new WeakHashMap<>();
public ThreadCompat() {
init();
}
private void init() {
interruptStatus.put(this, false);
}
public ThreadCompat(Runnable target) {
super(target);
init();
}
public ThreadCompat(ThreadGroup group, Runnable target) {
super(group, target);
init();
}
public ThreadCompat(String name) {
super(name);
init();
}
public ThreadCompat(ThreadGroup group, String name) {
super(group, name);
init();
}
public ThreadCompat(Runnable target, String name) {
super(target, name);
init();
}
public ThreadCompat(ThreadGroup group, Runnable target, String name) {
super(group, target, name);
init();
}
public ThreadCompat(ThreadGroup group, Runnable target, String name, long stackSize) {
super(group, target, name, stackSize);
init();
}
@Override
public void run() {
try {
super.run();
interruptStatus.remove(this);
} catch (Throwable e) {
interruptStatus.remove(this);
throw e;
}
}
@Override
public boolean isInterrupted() {
Boolean isInterrupted = interruptStatus.get(this);
return super.isInterrupted() || isInterrupted == null || isInterrupted;
}
@Override
public void interrupt() {
super.interrupt();
interruptStatus.remove(this);
}
}