美文网首页
Thread常用方法

Thread常用方法

作者: flyjar | 来源:发表于2024-12-02 17:39 被阅读0次

join

join和FutureTask的get函数一样,只有自身执行完成之后,才会继续向下执行。

Thread t1=new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("t1线程");
        });

        t1.start();
        t1.join();
        //主线程会等待t1执行完成才会继续执行
        System.out.println("主线程");

interrupt

执行interrupt,如果t1线程不是休眠状态(t1中执行了sleep或者wait),是不会抛出异常的。可以通过获取t1线程的打算状态。来通过业务逻辑结束正在运行的业务。
如果t1线程中有sleep,执行interrupt打断函数,打断休眠状态isInterrupted返回的是false,并不是true。sleep会抛出打断异常,可以通过捕获异常在异常处理中再次执行interrupt函数

 Thread t1  = new Thread(()->{
            while (true){
                boolean interrupted = Thread.currentThread().isInterrupted();
                if(interrupted){
                    System.out.println("t1线程被打断了");
                    break;
                }
            }
         });

        t1.start();
        Thread.sleep(2000);
        t1.interrupt();

优雅的结束线程

定义while(true)对打算状态进行时刻监控,什么时候外界调用打算函数,对线程进行业务逻辑方式进行终止
while会对cpu资源造成大量的消耗,所以加上sleep,但是sleep会导致isInterrupted状态重置,sleep会抛出打断异常,可以通过捕获异常在异常处理中再次执行interrupt函数

 private static Thread t1;

    public void start(){
        t1=new Thread(()->{
            //负责监控,什么时候外界调用打算函数,对线程进行业务逻辑方式进行终止
            while (true){
                boolean interrupted = Thread.currentThread().isInterrupted();
                if(interrupted){
                    System.out.println("线程被打断,");
                    break;
                }
                
                //如果不加上sleep,while会对cpu资源造成大量的消耗,但是sleep会导致isInterrupted状态重置
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //在异常中,重新设置中断状态,让下一次循环的时候,可以进行if判断,结束线程
                    Thread.currentThread().interrupt();
                    throw new RuntimeException(e);
                }
            }
          
        });
        t1.start();
    }
    
    public void stop(){
        t1.interrupt();
    }

不推荐使用的函数

这些方法已过时,容易破坏同步代码块,不释放锁,从而造成线程死锁

方法名 功能说明
stop() 停止线程运行
suspend() 挂起(暂停)
resume() 恢复线程运行

相关文章

  • Thread源码解读

    一、Thread类的私有参数 二、Thread 初始化分析 三、Thread常用方法实现分析1、start()方法...

  • Java学习笔记之线程

    Thread 常用方法 线程创建:Thread()/(Str name)/(Runnable target)/(R...

  • Thread常用方法

    Thread常用方法 join 当某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被joi...

  • Thread类常用方法

    setDaemon(boolean) 设置线程是否为守护线程,需要在线程调用.start()方法之前执行,否则会报...

  • Thread类常用方法

    常用方法 join 当某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加...

  • 如何使用 thread dump?如何分析Thread dump

    使用 thread dump 将会介绍三种常用的方法。请注意还会有其他很多方法可以获取Thread Dump。一个...

  • iOS多线程

    iOS多线程 Thread 线程的创建 两种创建线程的方法 。常用属性: name Thread.sleep(fo...

  • 线程创建的四种方式+具体案例

    JDK5.0之前 1、继承于Thread类创建线程 1.1、继承Thread类创建线程案例 1.2、线程的常用方法...

  • Thread类的常用方法

    String getName()返回该线程的名称。 void setName(String name)改变线程名称...

  • java线程&和各种奇奇怪怪的锁

    1、Java线程 一、Java多线程常用的两种实现方法 1、 继承Thread类 子类继承Thread类具备多线程...

网友评论

      本文标题:Thread常用方法

      本文链接:https://www.haomeiwen.com/subject/ymhcsjtx.html