美文网首页Java 杂谈程序员
Java高性能编程实战 - 线程终止

Java高性能编程实战 - 线程终止

作者: JavaEdge | 来源:发表于2019-08-29 01:26 被阅读0次

    1 虚假的线程中止- Stop

    Stop:中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。
    Destroy: JDK未实现该方法

    • 理想输出
      i=0 j=0
    • 程序执行结果


    没有保证同步代码块里面数据的一致性,破坏了线程安全

    2 真正的线程终止

    2.1 interrupt

    如果目标线程在调用Object class 的

    • wait()


    • wait(long)


    • wait(long, int)


    或者Thread类的

    • join()


    • join(long, int)


    • sleep(long, int)


    时被阻塞,那么Interrupt会生效, 该线程的中断状态将被清除,拋InterruptedException

    如果目标线程是被I/O或者NIO中的Channel所阻塞,同样,I/O操作会被中断或者返回特殊异常值。达到终止线程的目的。

    如果以上条件都不满足,则会设置此线程的中断状态。
    对于上面的示例

    • stop改成interrupt


    • 最终输出为“i=1 j=1”,数据一致


    2.2 标志位

    • 即代码中,增加一个判断,来控制线程执行的中止

    相关文章

      网友评论

        本文标题:Java高性能编程实战 - 线程终止

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