Java多线程学习笔记 - Thread类源码内的方法概览

一、isAlive()

        测试此线程是否存在。 如果线程已启动且尚未死亡,则该线程处于活动状态。如果该线程还活着,则为 true; 否则为false。

二、sleep

        使当前执行的线程休眠(暂时停止执行)指定的毫秒数,取决于系统计时器和调度程序的精度和准确性。

Thread.sleep(1000);

        使当前执行的线程休眠(暂时停止执行)指定的毫秒数加上指定的纳秒数,具体取决于系统计时器和调度程序的精度和准确性。

Thread.sleep(1000, 500); 

        java.util.concurrent包下面的一个类,时间单位更明晰。

TimeUnit.NANOSECONDS.sleep(10000);

        TimeUnit 主要用于通知基于时间的方法应如何解释给定的计时参数。例如,如果锁不可用,以下代码将在 50 毫秒后超时。

Lock lock = ...;
 if (lock.tryLock(50L, TimeUnit.MILLISECONDS)) ...

三、getId()

        返回此线程的标识符。 线程 ID 是创建此线程时生成的正长整数。 线程 ID 是唯一的,并且在其生命周期内保持不变。 当一个线程被终止时,这个线程 ID 可以被重用。

四、currentThread()

        返回对当前正在执行的线程对象的引用。

五、yield()

        yield()方法的作用是放弃当前的CPU资源,让其他任务去占用CPU执行时间,放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。

        不过实际很少会使用这种方法。 但它对于调试或测试目的可能很有用,它可能有助于重现由于竞争条件导致的错误。 在设计并发控制结构(例如 java.util.concurrent.locks 包中的结构)时,它也可能很有用。

六、init

        实例化一个线程或者可以加入线程组

private void init(ThreadGroup g, Runnable target, String name,
                      long stackSize) {
    init(g, target, name, stackSize, null);
}

七、clone()

        没有用处

八、start()

        使该线程开始执行; Java 虚拟机调用该线程的 run 方法。结果是两个线程同时运行:当前线程(从对 start 方法的调用返回)和另一个线程(执行其 run 方法)。

        多次启动一个线程是不合法的。 另外,线程一旦完成执行就可能不会重新启动。

九、exit()

        系统调用此方法使线程有机会在实际退出之前进行清理。

十、interrupt()

        中断这个线程。

十一、interrupted()

        测试当前线程是否被中断。线程的中断状态受此方法的影响。

十二、isInterrupted()

        测试此线程是否已被中断。 线程的中断状态不受此方法的影响。

十三、setPriority(int newPriority)

        设置线程的优先级

十四、getPriority()

        获取线程的优先级

十五、setName(String name)

        设置线程名称

十六、getName()

        获取线程名称

十七、getThreadGroup()

        返回该线程所属的线程组。 如果此线程已终止(已停止),则此方法返回 null。

十八、activeCount()

        返回当前线程的线程组及其子组中活动线程数的估计值。 递归迭代当前线程的线程组中的所有子组。

十九、enumerate(Thread tarray[])

        将当前线程的线程组及其子组中的每个活动线程复制到指定的数组中。 该方法只是调用当前线程的线程组的 ThreadGroup.enumerate(Thread[]) 方法。

        由于此方法中固有的竞争条件,建议仅将该方法用于调试和监视目的。

二十、join()方法

        当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行。

二十一、dumpStack

        将当前线程的堆栈跟踪打印到标准错误流。 此方法仅用于调试。

二十二、setDaemon(boolean on)

        将此线程标记为守护线程或用户线程。 当唯一运行的线程都是守护线程时,Java 虚拟机退出。

二十三、isDaemon()

        测试此线程是否为守护线程。

二十四、checkAccess()

        确定当前运行的线程是否有权修改该线程。

二十五、toString()

        返回此线程的字符串表示形式,包括线程的名称、优先级和线程组。

二十六、getContextClassLoader()

        @CallerSensitive修饰,返回此线程的上下文 ClassLoader。

二十七、setContextClassLoader()

        设置此线程的上下文 ClassLoader。 上下文ClassLoader 可以在创建线程时设置,并允许线程的创建者提供适当的类加载器。

二十八、holdsLock()

        检查线程的锁持有窗台

二十九、getStackTrace() 

        返回表示此线程的堆栈转储的堆栈跟踪元素数组。

三十、getAllStackTraces()

        返回所有活动线程的堆栈跟踪映射。

三十一、getState()

        返回此线程的状态。 此方法设计用于监控系统状态,而不是用于同步控制。

六、废弃的方法

        stop()、destroy()、suspend()、resume()、countStackFrames()

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/123507683
今日推荐