多线程之Thread类常见方法及线程的状态

简介: 多线程之Thread类常见方法及线程的状态

Thread类常见方法

创建、启动线程、终止线程、线程等待、获取线程实例、线程休眠

1.关于如何创建线程,在专栏的上一篇文章已经谈到了有5中创建线程的方式。

2.启动线程(t.start):调用 start 方法, 才在操作系统的底层创建出一个线程。

 

3.终止线程

停止线程的方式目前常见的有两种方法:

1. 通过共享的标记来进行沟通(需要给标志位上加 volatile 关键字)

2. 调用 interrupt()方法来通知

image.png

thread 收到通知的方式有两种:


1. 如果线程因为调用 wait/join/sleep 等方法而阻塞挂起,则以 InterruptedException 异常的形式通知,清除中断标志。当出现 InterruptedException 的时候, 要不要结束线程取决于 catch 中代码的写法,可以选择忽略这个异常, 也可以结束线程。

2.当线程没有阻塞时,那么这个时候只是内部的一个中断标志被设置,thread 可以通过

Thread.interrupted() 判断当前线程的中断标志被设置,清除中断标志。

Thread.currentThread().isInterrupted() 判断指定线程的中断标志被设置,不清除中断标志。

4.线程等待(join)

image.png

5.获取当前线程实例

public static Thread currentThread();(返回当前线程对象的引用)
public class ThreadDemo { 
   public static void main(String[] args) { 
       Thread thread = Thread.currentThread(); 
       System.out.println(thread.getName()); 
  } 
} 


6.线程休眠

public static void sleep(long millis);(休眠当前线程 millis 毫秒)
public class ThreadDemo { 
   public static void main(String[] args) throws InterruptedException { 
       Thread.sleep(3 * 1000); 
      } 
}


线程的状态

1.NEW创建了Thread对象,但是还没调用start(内核里还没创建对应PCB)

2.TERMINATED表示内核中的pcb已经执行完毕了,但是Thread对象还在

3.RUNNABLE可运行的(正在运行或者就绪)

4.阻塞(WAITING/TIMED_WAITING/BLOCKED),表示线程pcb正在阻塞队列中



相关文章
|
8月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
357 0
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
278 1
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
299 1
|
8月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
5月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
245 6
|
8月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
398 83
|
10月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
389 0
|
5月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
518 0
|
6月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
449 16
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
255 26

热门文章

最新文章