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线程创建、启动与安全停止内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Boot集成WebSocket项目实战的示例代码
本文主要介绍了Spring Boot集成WebSocket项目实战的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-10-10
深入dom4j使用selectSingleNode方法报错分析
本篇文章是对dom4j使用selectSingleNode方法报错进行了详细的分析介绍,需要的朋友参考下2013-05-05
Java中数据库连接池HikariCP和Druid的技术对比与性能分析
在现代Java应用开发中,数据库连接池是提升应用性能的关键组件之一,本文将深入对比两个主流的Java数据库连接池,希望对大家有一定的帮助2025-08-08


最新评论