📄 aethread2.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: AEThread2.java
package org.gudy.azureus2.core3.util;
import java.util.LinkedList;
// Referenced classes of package org.gudy.azureus2.core3.util:
// AEThread, AESemaphore, DebugLight, SystemTime
public abstract class AEThread2
{
private static final class JoinLock
{
volatile boolean released;
private JoinLock()
{
released = false;
}
}
protected static class threadWrapper extends Thread
{
private AESemaphore sem;
private AEThread2 target;
private JoinLock currentLock;
private long last_active_time;
public void run()
{
_L3:
JoinLock joinlock = currentLock;
JVM INSTR monitorenter ;
target.run();
target = null;
currentLock.released = true;
currentLock.notifyAll();
break MISSING_BLOCK_LABEL_88;
Throwable e;
e;
DebugLight.printStackTrace(e);
target = null;
currentLock.released = true;
currentLock.notifyAll();
break MISSING_BLOCK_LABEL_88;
Exception exception;
exception;
target = null;
currentLock.released = true;
currentLock.notifyAll();
throw exception;
Exception exception1;
exception1;
throw exception1;
AEThread2.daemon_threads.addLast(this);
setName((new StringBuilder()).append("AEThead2:parked[").append(AEThread2.daemon_threads.size()).append("]").toString());
linkedlist;
JVM INSTR monitorexit ;
goto _L1
exception2;
throw exception2;
_L1:
sem.reserve();
if (target != null) goto _L3; else goto _L2
_L2:
}
protected void start(AEThread2 _target, String _name)
{
target = _target;
setName(_name);
if (sem == null)
{
sem = new AESemaphore("AEThread2");
super.start();
} else
{
sem.release();
}
}
protected void retire()
{
sem.release();
}
protected threadWrapper(String name, boolean daemon)
{
super(name);
setDaemon(daemon);
}
}
public static final boolean TRACE_TIMES = false;
private static final int MIN_RETAINED = 2;
private static final int MAX_RETAINED = 16;
private static final int THREAD_TIMEOUT_CHECK_PERIOD = 10000;
private static final int THREAD_TIMEOUT = 60000;
private static final LinkedList daemon_threads = new LinkedList();
private static long last_timeout_check;
private static long total_starts;
private static long total_creates;
private threadWrapper wrapper;
private String name;
private boolean daemon;
private int priority;
private volatile JoinLock lock;
public AEThread2(String _name, boolean _daemon)
{
priority = 5;
lock = new JoinLock();
name = _name;
daemon = _daemon;
}
public void start()
{
JoinLock currentLock = lock;
JoinLock newLock;
synchronized (currentLock)
{
if (currentLock.released)
newLock = lock = new JoinLock();
else
newLock = currentLock;
}
if (daemon)
synchronized (daemon_threads)
{
total_starts++;
if (daemon_threads.isEmpty())
{
total_creates++;
wrapper = new threadWrapper(name, true);
} else
{
wrapper = (threadWrapper)daemon_threads.removeLast();
wrapper.setName(name);
}
}
else
wrapper = new threadWrapper(name, false);
if (priority != wrapper.getPriority())
wrapper.setPriority(priority);
wrapper.currentLock = newLock;
wrapper.start(this, name);
}
public void setPriority(int _priority)
{
priority = _priority;
if (wrapper != null)
wrapper.setPriority(priority);
}
public void setName(String s)
{
name = s;
if (wrapper != null)
wrapper.setName(name);
}
public String getName()
{
return name;
}
public void interrupt()
{
if (wrapper == null)
{
throw new IllegalStateException("Interrupted before started!");
} else
{
wrapper.interrupt();
return;
}
}
public boolean isCurrentThread()
{
return wrapper == Thread.currentThread();
}
public String toString()
{
if (wrapper == null)
return (new StringBuilder()).append(name).append(" [daemon=").append(daemon).append(",priority=").append(priority).append("]").toString();
else
return wrapper.toString();
}
public abstract void run();
public static boolean isOurThread(Thread thread)
{
return AEThread.isOurThread(thread);
}
public static void setOurThread()
{
AEThread.setOurThread();
}
public static void setOurThread(Thread thread)
{
AEThread.setOurThread(thread);
}
public void join()
{
JoinLock currentLock = lock;
synchronized (currentLock)
{
while (!currentLock.released)
try
{
currentLock.wait();
}
catch (InterruptedException e) { }
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -