Thread类详解

本文详细介绍了Java中的Thread类,包括构造方法、守护线程的设置、join方法的使用、interrupt方法及其与中断状态的关系。此外,还讨论了多线程数据同步的synchronized关键字和静态代码块锁的机制,以及sleep和wait方法的区别。同时,文章还提到了线程异常处理和应用钩子的添加方法。
摘要由CSDN通过智能技术生成

Thread类构造方法

  • 创建Thread对象,默认有一个线程名,以Thread-开头,按序增加的数字,从0开始
  • 如果在构造Thread的时候没有传递Runnable或者没有复写Thread的run方法,该Thread不会执行任何东西。
  • 如果构造Thread对象是没有传入ThreadGroup,则默认获取父线程的group作为当前线程的group。此时子线程和父线程在同一个group中
  • stackSize可以指定线程的栈的大小,如果没有指定stackSize默认是0,0代表忽略该参数。该参数由JVM使用。注意:该参数有些平台无效,一般通过 -Xss 10M 设置栈的大小

Thread类常用构造方法

Thread()
Thread(String name)
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, String name)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name,long stackSize)

守护线程

通过thread.setDaemon(true);设置守护线程;伴随着非守护线程结束和结束。主要作为辅助功能使用。

  • 必须在调用start方法前设置线程为守护线程

Thread的join方法详解

join 方法的作用:等待当前线程执行完成。还有两个重载方法:

  • join(long millis) 等待指定的时间,单位毫秒
  • join(long millis, int nanos) 和上面的方法类似,只是在毫秒的基础上在加了纳秒。更加精确
        Thread t1 = new Thread(() -> {
   
            IntStream.range(1, 1000).forEach(i -> System.out.println(Thread.currentThread().getName() + "->" + i));
        });
        Thread t2 = new Thread(() -> {
   
            IntStream.range(1, 1000).forEach(i -> System.out.println(Thread.currentThread().getName() + "->" + i));
        });
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println("All of done");
        IntStream.range(1, 1000).forEach(i -> System.out.println(Thread.currentThread().getName() + "->" + i));

t1和t2线程交替执行。
main线程等待t1、t2执行完再执行

Thread的interrupt方法

可以对调用者的线程中断,设置中断标记。并且在调用wait()、join()、sleep() 方法的时候会抛出InterruptedException ,如果捕捉了该异常则中断标记将被清除。

 Thread t = new Thread(() -> {
   
            while (true) {
   
                
            }
        });

        t.start();

        Thread.sleep(100);
        System.out.println(t.isInterrupted());
        t.interrupt();
        Thread.sleep(200);
        System.out.println(t.isInterrupted());

输出结果

false
true

捕获异常

 Thread t = new Thread(() -> {
   
            while (true) {
   
                try {
   
                    Thread.sleep(100);
                } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值