Thread 类工具

Thread类方法提供一些功能。
在这里插入图片描述

1 currentThread

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

        Thread thread = Thread.currentThread();
        System.out.println(thread);

打印调用的Thread的toString方法。
打印线程名、优先级、组名信息。

Thread[main,5,main]

2 activeCount

返回当前线程的及其子组中活动线程数的估计。递归迭代当前线程的线程组中的所有子组。返回的值只是一个估计值,因为当此方法遍历内部数据结构时,线程的数量可能会动态变化,并且可能受到某些系统线程的存在的影响。此方法主要用于调试和监视目的。

        int activeCount = Thread.activeCount();
        System.out.println(activeCount);

3 dumpStack

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

Thread.dumpStack();
java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Thread.java:1336)
	at org.example.ThreadUtil.main(ThreadUtil.java:18)

4 enumerate

将当前线程的线程组及其子组中的每个活动线程复制到指定数组中。应用程序可以使用Thread.activeCount方法来估计数组应该有多大,用于调试和监视目的。

        Thread[] threads = new Thread[Thread.activeCount()];
        int enumerate = Thread.enumerate(threads);
        System.out.println(enumerate);
        System.out.println(Arrays.toString(threads));

5 getAllStackTraces

返回所有活动线程的栈信息。接近jstack

        Map<Thread, StackTraceElement[]> allStackTraces = Thread.getAllStackTraces();
        allStackTraces.forEach((k, v) ->{
            System.out.println("===========start==========");
            System.out.println(k);
            Arrays.stream(v).forEach(System.out::println);
            System.out.println("===========end==========\n");
        });

6 getDefaultUncaughtExceptionHandler

返回当线程因未捕获异常而突然终止时调用的默认处理程序,默认为null(控制台打印异常栈)。可以通过setDefaultUncaughtExceptionHandler设置

        Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
        System.out.println(defaultUncaughtExceptionHandler);

7 setDefaultUncaughtExceptionHandler

设置当线程因未捕获异常而突然终止且未为该线程定义其他处理程序时调用的默认处理程序。未捕获异常处理首先由线程控制,然后由线程组对象控制,最后由默认的未捕获异常处理程序控制。可以用于异常统一收集分析。

    @FunctionalInterface
    public interface UncaughtExceptionHandler {
        void uncaughtException(Thread t, Throwable e);
    }
        Thread.setDefaultUncaughtExceptionHandler((new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println(t);
                System.out.println(e);
            }
        }));

8 holdsLock

当且仅当当前线程持有指定对象上的监视器锁时返回true

        Object lock = new Object();
        Object lock2 = new Object();
        // holdsLock
        synchronized (lock) {
            System.out.println(Thread.holdsLock(lock));
            System.out.println(Thread.holdsLock(lock2));
        }

9 interrupted

测试当前线程是否已中断。线程的中断状态通过此方法清除

10 sleep

根据系统计时器和调度器的精度和准确性,使当前正在执行的线程休眠(临时停止执行)指定的毫秒数[加上指定的纳秒数]。线程不会失去任何监视器的所有权。如果有线程中断了当前线程。当抛出InterruptedException,当前线程的interrupted status将被清除。

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

11 yield

向调度程序提示当前线程愿意让出其当前对处理器的使用。调度程序可以忽略这个提示。Yield是一种启发式的尝试,它可以改善那些过度使用CPU的线程之间的相对进程。它的使用应该与详细的概要分析和基准测试相结合,以确保它实际上具有预期的效果。

12 MAX_PRIORITY

线程可以拥有的最大优先级。10

13 MIN_PRIORITY

线程可以拥有的最小优先级。1

14 NORM_PRIORITY

分配给线程的默认优先级。5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值