Java线程核心操作之创建、启动与安全停止完全解析

 更新时间:2026年03月17日 09:19:15   作者:fengxin_rou  
Java作为一种广泛使用的编程语言,具有丰富的多线程支持,在Java中处理多线程的核心在于Thread类和Runnable接口,这篇文章主要介绍了Java线程核心操作之创建、启动与安全停止完全解析的相关资料,需要的朋友可以参考下

1.创建线程的方法有哪些?

继承Thread类

优点:继承Thread操作简单,用Thread.currentThread()可以得到当前运行的线程,用this也可以直接得到当前运行的线程

缺点:继承Thread类后不能继承其他类

实现Runnable接口

若是一个方法继承了其他父类,就可以实现java.lang.Runnable接口,实现接口需要重写它的Run方法,然后在Thread构造器里把Runnable对象作为参数传递进去,然后使用strat()方法创建线程

优点:可以在继承其他父类时,创建线程,并且可以实现多个线程资源共享,可以操作同一个Runnable对象,可以把cpu代码和数据分开,更好体现面向对象的编程思想

缺点:操作比较复杂,访问当前线程只能用Tread.currentTread()方法

实现Callable接口与FutureTask

java.util.concurrent.Callable接口类似于Runnable接口,但Callabe接口的call方法有返回值还可以抛出异常,想要创建线程需要先创建Callable对象,然后把对象作为参数传给Future Task任务管理器,然后创建线程,执行Callable任务、还可以得到任务结果

优点:可以继承其他父类,并且实现资源共享

缺点:操作复杂并且访问当前线程只能Thread.currentThead()

使用线程池

Java 5 引入的java.util.concurrent.ExecutorService接口和其他类,提供了线程池的支持,避免了查询和创建线程,可以通过Executor的静态方法创建不同类型的线程池、提高了线程管理效率

优点:可以避免重用预先创建的线程,避免了创建和查询线程的开销,提高了线程管理的效率。线程池可以合理的分配线程,避免资源浪费,如果遇到并发情况,线程池还可以快速提供线程来处理任务,减少等待时间。合理设置线程池的大小,可以提高cpu的利用率和系统吞吐量

补:系统吞吐量是指单位时间内系统成功处理的任务或业务量

缺点:代码操作比较复杂,在设置线程池参数的时候如果出错,可能会引起死锁,资源进程等问题,修复起来比较复杂

2.怎么启动线程?

通过Thread类的strat方法

3.怎么停止线程?

当线程执行 wait()/sleep()/join() 等可中断阻塞方法时,调用 interrupt() 会唤醒线程并抛出 InterruptedException,我们可以捕获该异常实现线程中断;而正常运行的线程,需通过轮询 interrupted()/isInterrupted() 判断中断状态,主动停止线程(无异常抛出)

stop()暴力停止:已经被废弃,线程如果强行调用stop()暴力停止可能会引起清理性的工作无法完成

补:

中断

是一个动作也就是调用Thread.interrupt()方法,改方法会发送一个中断请求,这是一个信号,不是强制立刻停止线程。

中断标记(中断状态)​

这是线程对象内部的一个布尔标志位(true/false):

  • true表示该线程收到了中断请求(但未必已处理)。

  • false表示没有收到中断请求或已被清除。

这个标志位是持久化存储在线程对象里的,直到被显式改变。

到此这篇关于Java线程核心操作之创建、启动与安全停止完全解析的文章就介绍到这了,更多相关Java线程创建、启动与安全停止内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot集成开发实现商场秒杀功能

    springboot集成开发实现商场秒杀功能

    这篇文章主要介绍了springboot集成实现商品秒杀功能,秒杀系统业务流程,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • java中fastjson生成和解析json数据(序列化和反序列化数据)

    java中fastjson生成和解析json数据(序列化和反序列化数据)

    本篇文章主要介绍了java中fastjson生成和解析json数据(序列化和反序列化数据),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • Java(TM) Platform SE binary 打开jar文件的操作

    Java(TM) Platform SE binary 打开jar文件的操作

    这篇文章主要介绍了Java(TM) Platform SE binary 打开jar文件的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 在Spring Boot2中使用CompletableFuture的方法教程

    在Spring Boot2中使用CompletableFuture的方法教程

    这篇文章主要给大家介绍了关于在Spring Boot2中使用CompletableFuture的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2019-01-01
  • JVM(Java虚拟机)简介(动力节点Java学院整理)

    JVM(Java虚拟机)简介(动力节点Java学院整理)

    Java虚拟机(Jvm)是可运行Java代码的假想计算机。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。对java jvm 虚拟机感兴趣的朋友通过本文一起学习吧
    2017-04-04
  • 基于Java在netty中实现线程和CPU绑定

    基于Java在netty中实现线程和CPU绑定

    这篇文章主要介绍了基于Java在netty中实现线程和CPU绑定,文章围绕主题的相关内容展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Java实现整数分解质因数的方法示例

    Java实现整数分解质因数的方法示例

    这篇文章主要介绍了Java实现整数分解质因数的方法,结合实力形式分析了质因数分解的原理与实现方法,涉及java数值运算相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • JAVA读取文本文件内容实例代码

    JAVA读取文本文件内容实例代码

    这篇文章主要给大家介绍了关于JAVA读取文本文件内容的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Springboot项目如何兼容老的Spring项目问题

    Springboot项目如何兼容老的Spring项目问题

    这篇文章主要介绍了Springboot项目如何兼容老的Spring项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • SpringSecurity怎样使用注解控制权限

    SpringSecurity怎样使用注解控制权限

    这篇文章主要介绍了SpringSecurity怎样使用注解控制权限的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论