Dying again
This commit is contained in:
81
common/src/main/java/com/stardust/lang/ThreadCompat.java
Normal file
81
common/src/main/java/com/stardust/lang/ThreadCompat.java
Normal file
@@ -0,0 +1,81 @@
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user