Java中Thread类基本方法的使用

文章详细介绍了Java中线程的创建使用start()方法,线程的中断通过interrupt()设置中断标志,并演示了如何处理InterruptedException。线程的等待通过join()方法实现,线程休眠利用sleep()方法设定间隔,以及如何获取当前线程实例。同时,文章提供了示例代码以帮助理解这些概念。
摘要由CSDN通过智能技术生成

目录

1.线程的创建

2.线程的中断(终止)

3.线程的等待

4.线程的休眠

5.获取当前线程实例


1.线程的创建

     start()方法用于创建并执行线程.它与run()方法的区别是: run()方法是一个特殊方法,相当于线程的入口,其中是线程要实现的逻辑,它一般都是通过系统自动调用,而不是我们手动去调用.且它不会创建一个新的线程.而调用start()方法会先使用操作系统API去创建一个新的线程,然后该新的线程会去调用run()方法.

          ●示例代码

        Thread thread = new Thread(() -> {
            System.out.println("thread1");
        });

        //1.线程的创建
        thread.start();

注:如果需要查看线程是否创建成功,可以通过jdk的bin目录下的jconsole.exe查看(只能查看在运行中的线程).

2.线程的中断(终止)

     嘿嘿,在之前使用的stop()方法,但是现在已经弃用,根据jdk帮助文档可以知道:

    现在我们通过interrupt()来中断线程,其中断步骤分为两步:首先,设置中断标志位为true(默认为false),其次,如果线程正在阻塞中(正在执行sleep()方法),则会唤醒阻塞状态,就会以抛异常的方式中断线程,但是它不会直接中断线程,而是让我们自己选择是否中断线程.

这么讲可能有点抽象,大家可能一时之间不能理解,我们看一下示例代码:

          ●示例代码 

            抛异常我们没有中断线程:

        Thread thread = new Thread(() -> {
            //得到当前线程实例,用isInterrupted()方法去判断线程是否发生中断
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("thread1");
                try {
                    //sleep识别到中断标志位为true,则会抛出InterruptedException异常
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    //抛异常让我们决定是否中断线程
                    //如果我们没有中断线程,那么在抛完线程后,线程会继续执行(sleep()方法会将中断标志位重新变为false)
//                    break;
                }
            }
            System.out.println("线程中断");
        });

        //得到线程的状态
        System.out.println(thread.getState());
        //1.线程的创建
        thread.start();
        //2.线程的中断
        //2.1将中断标志位设为true
        System.out.println(thread.getState());//线程正在执行
        Thread.sleep(3000);//三秒后中断线程
        thread.interrupt();

        Thread.sleep(3000);//三秒后打印线程的状态
        System.out.println(thread.getState());//线程中断(terminated)

           ● 运行结果:

线程会在抛异常后继续执行,反之我们选择中断线程(break注释取消),线程则不会继续执行:

注:在唤醒阻塞状态后,sleep()方法会自动将中断标志位设为false.


3.线程的等待

    去游乐场玩旋转木马,每个木马都有人坐了,我们就只能等待某一个人玩的时间到了,我们再去玩.当然也有可能我们到玩旋转木马的地方,刚好有个空位,我们就可以无需等待,直接去玩.因为多个线程之间是并发运行的,且调度顺序不确定.我们就可以让线程A先等待线程B执行完毕后再去执行.这样可以保证线程A一定在线程B后面执行.我们这里使用的是join()方法.(在哪个线程中调用则哪个线程等待,哪个线程调用则等待的是谁,比如我在主线程中调用thread.join(),那么就是主线程等thread线程执行完毕后再执行.),具体可以看示例代码及运行结果.

           ● 示例代码

        Thread thread = new Thread(() -> {
            //得到当前线程实例,用isInterrupted()方法去判断线程是否发生中断
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("thread1");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }
            System.out.println("线程中断");
        });


        //3.线程的等待
        thread.join();//主线程等待thread线程执行完毕后再执行

        while (true) {
            Thread.sleep(3000);
            System.out.println("main");
        }

           ● 运行结果:

              没有规定谁等待谁,thread线程和主线程并发执行,调度顺序随机.

               thread1一直在执行,而主线程处于等待中. 


4.线程的休眠

     当一个线程执行时,如果我们可以给它设置休眠时长.(如果不设置休眠时长,那么线程会执行的非常快,有的时候可能会错过我们需要查看的打印信息).这里我们使用sleep()方法.对应参数为时间长度(单位为毫秒).

           ● 示例代码

        while (true) {
            try {
                Thread.sleep(3000);//让主线程每三秒执行一次
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("main");
        }

注:sleep是类方法,不属于某个Thread类对象,直接用类名.sleep()调用.示例代码中线程休眠的异常于main方法


5.获取当前线程实例

    在给大家解释线程中断的时候,我们用到了currentThread()方法,用于获取当前线程实例,该方法也是属于类方法,而不属于某个Thread对象.

 我们可以得到当前正在执行的线程,然后通过getId(),getState(),getName()等方法对它的id,状态,名称等属性进行获取.


分享完毕~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值