简单说明
博文中提到的"可参阅博文"还没来得及写,见谅!
静态方法
Thread Thread.currentThread()
该方法用于获取当前线程对象,当我们用Runnable方式来实现run的时候,run中的this指向的不是线程对象,此时你要获取当前线程,就可以用该方法。void Thread.sleep(long millis)
使当前线程进入TIMED_WAITING
状态,millis参数单位为毫秒,表示进入TIMED_WAITING状态的时间。该方法调用后会继续占用共享资源和CPU。void Thread.sleep(long millis, int nanos)
两个参数的sleep还是那个sleep,nanos表示纳秒,睡眠时间则为毫秒数+纳秒数。普及一下,1毫秒=1000微秒=1000000纳秒。nanos取值是闭区间[0,999999],有了这个方法,也就可以做到微秒和纳秒级的sleep了。boolean Thread.interrupted()
返回当前线程是否被中断。如果被中断,则返回true并且将中断标识重新设置为false。详情请参阅《Java多线程 - 线程的中断》。int Thread.activeCount()
API上说了,返回当前线程的线程组中活动线程的数目。这句话我读懂了,但是当前线程的线程组包含了哪些线程呢?活动线程指的是什么状态下的线程呢?这在《Java多线程 - 什么是活跃线程》博文中进行了较深入的探究。void Thread.yield()
Thread类中的注释说了,该方法被执行后,意味着当前程序愿意让出它所使用的处理器。我们可以深入理解并总结一下:该方法执行后,表示当前线程让出处理器,别的线程可以使用当前线程所使用的处理器了,但并不意味当前线程不会在让出后立马重新获取到了让出的处理器。在同步块中,也并不意味着释放了同步锁。Map<Thread, StackTraceElement[]> Thread.getAllStackTraces()
看该方法中的注释和自己写代码验证,这个方法用于获取当前时间点所有活跃线程中的方法调用记录(堆栈快照),例如A调用了B,B调用了C,那么得到当前线程下方法的调用记录为C,B,A。这在博文《Java多线程 - StackTrace》中进行了较深入的探究。int Thread.enumerate(Thread tarray[])
该方法会将当前时间点所有的活跃线程装载到tarray数组当中去。注意,并不是当前线程下的活跃子线程。void Thread.dumpStack()
这个方法的源码只有一句代码:new Exception(“Stack trace”).printStackTrace(); 目的是用于打印当前线程在当前时间点的堆栈记录。native void Thread.holdsLock(Object obj)
这是一个native方法,用于判断当前线程是否获取到了obj的同步锁。方法注释上,说明这个方法的设计是用于assert的,我也想不出来有什么场景下可以assert。所以明白这个意思就好了。void Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)
该方法用于设置线程默认的异常处理对象(作用在所有的线程对象上),在一个线程中,如果出现了异常,但我们没有捕获处理,那么就会交给UncaughtExceptionHandler来处理。详情参阅博文《Java多线程 - UncaughtExceptionHandler详解》void Thread.getDefaultUncaughtExceptionHandler()
该方法用于获取线程默认处理器。
实例方法
synchronized void setName(String name)
设置线程名称,为了确保多个线程同时设置名称,该方法被设计为同步方法final void setDaemon(boolean on)
设置线程为守护线程,什么是守护线程?详情请参阅《Java多线程 - 守护线程》final void setPriority(int newPriority)
设置线程执行优先级,取值为一个闭区间[1,10]。如果给定的值不在闭区间内,则会抛出java.lang.IllegalArgumentException。可以查看源码来得到这个结论:
public final void setPriority(int newPriority) {
ThreadGroup g;
checkAccess();
if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {
throw new IllegalArgumentException();
}
if((g = getThreadGroup()) != null) {
if (newPriority > g.getMaxPriority()) {
newPriority = g.getMaxPriority();
}
setPriority0(priority = newPriority);
}
}
-
void setUncaughtExceptionHandler(UncaughtExceptionHandler eh)
该方法用于设置当前线程对象的异常处理器。线程可以有自己的异常处理器,如果线程本身没有设置异常处理器,那么会交给默认的异常处理器处理。详情请参阅《Java多线程 - UncaughtExceptionHandler详解》 -
void setContextClassLoader(ClassLoader cl)
设置线程上下文的类加载器,至于不同的加载器对线程的影响,有兴趣的同学可以先详细了解一下类加载器。 -
final String getName()
获取线程名称 -
final long getId()
获取线程ID -
StackTraceElement[] getStackTrace()
获取当前线程在当前时间点的堆栈快照。什么是堆栈快照,详情请参阅见《Java多线程 - StackTrace》 -
ThreadGroup getThreadGroup()
获取当前线程对象的线程组对象。什么是线程组?详情请参阅《Java多线程 - ThreadGroup》 -
ClassLoader getContextClassLoader()
获取当前线程的类加载器 -
int getPriority()
获取线程优先级 -
State getState()
获取当前线程对象的线程状态对象 -
UncaughtExceptionHandler getUncaughtExceptionHandler()
获取当前线程的异常处理器 -
synchronized void start()
用于启动线程,该方法调用后,线程进入RUNNABLE
状态。注意这个方法是同步的,这是为了避免多个线程同时对Thread对象进行start。 -
void run()
线程的主体方法,线程被执行的就是这个方法 -
final void checkAccess()
-
void interrupt()
详情请参见《Java多线程 - 线程的中断》 -
final boolean isDaemon()
判断当前线程对象是否为守护线程,什么是守护线程。参见《Java多线程 - 守护线程》 -
boolean isInterrupted()
详情请参见《Java多线程 - 线程的中断》 -
final native boolean isAlive()
判断当前线程是否还“活着”,注意:这是一个final native方法,仔细想想,这么去修饰是合情合理的。 -
final void join() throws InterruptedException
详情请参见《Java多线程 - join方法的探究》 -
final synchronized void join(long millis) throws InterruptedException
详情请参见《Java多线程 - join方法的探究》 -
final synchronized void join(long millis, int nanos) throws InterruptedException
详情请参见《Java多线程 - join方法的探究》