1
  • 最佳答案

    1.正常运行结束指线程体执行完成,线程自动结束。

    2.使用退出标志退出线程在一般情况下,在run方法执行完毕时,线程会正常结束。然而,有些线程是后台线程,需要长时间运行,只有在系统满足某些特殊条件后,才能触发关闭这些线程。这时可以使用一个变量来控制循环,比如设置一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出

    3.使用interrupt方法终止线程有以下两种情况。

    (1)线程处于阻塞状态。例如,在使用了sleep、调用锁的wait或者调用socket的receiver、accept等方法时,会使线程处于阻塞状态。在调用线程的interrupt方法时,会抛出InterruptException异常。我们通过代码捕获该异常,然后通过break跳出状态检测循环,可以有机会结束这个线程的执行。通常很多人认为只要调用interrupt方法就会结束线程,这实际上理解有误,一定要先捕获InterruptedException异常再通过break跳出循环,才能正常结束run方法。

    (2)线程未处于阻塞状态。此时,使用isInterrupted方法判断线程的中断标志来退出循环。在调用interrupt方法时,中断标志会被设置为true,并不能立刻退出线程,而是执行线程终止前的资源释放操作,等待资源释放完毕后退出该线程。

    4.使用stop方法终止线程:不安全在程序中可以直接调用Thread.stop方法强行终止线程,但这是很危险的,就像突然关闭计算机的电源,而不是正常关机一样,可能会产生不可预料的后果。

    1308289732882587648  评论     打赏       废物点心
    • guitarock  回复 @废物点心
      static boolean interrupted()方法和boolean isInterrupted()方法的区别是什么
      guitarock 2021-04-02 15:19   回复 1166178972732514304
  • 问题没问清楚,是到阻塞 还是到销毁?

    阻塞

    .sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。

    .wait()方法,JVM 会把该线程放入等待队列(waitting queue)

    中。释放锁

    销毁:

    stop()方法来结束该线程—该方法通常容易导致死锁,不推荐使用。

    1308289732882587648  评论     打赏       废物点心
    • 废物点心  回复 @废物点心
      正常执行,线程就会停止。出现异常也会停止
      废物点心 2021-03-25 16:46   回复 1308289732882587648
    • 断点-含光君  回复 @废物点心
      我猜他的意图是:一个运行中的线程在工作中,他想放弃他,不要了,cancel或者interrupt?
      断点-含光君 2021-03-26 10:00   回复 1139423796017500160
    • 废物点心  回复 @断点-含光君
      哈哈,主要是问题8个字,问的不是很清楚
      废物点心 2021-03-26 12:29   回复 1308289732882587648
    • 断点-含光君  回复 @废物点心
      emmm,如果是面试,尽量都说下,全面封死,让他没得问
      断点-含光君 2021-03-26 13:40   回复 1139423796017500160
相关问题
吕氏春秋 · java / 多线程并发
2020-03-19 03:46 859 4
你好,孙耀耀 · java / 多线程
2023-01-08 15:21 52 10
deanhu · AOSP
2024-04-25 21:53 2 10
幻影~ · 提问
2024-04-13 20:13 10 2
幻影~ · 找工作
2024-04-07 10:44 16 2
幻影~ · 问题
2024-03-31 17:20 7 2
TONYGFX · AOSP
2024-03-28 17:11 4 2