java线程基础

2026年佰维存储数字IC笔试试卷带答案 建立时间是有效时钟沿到来前,输入数据必须稳定保持的最短时间。保持时间是有效时钟沿到来后,输入数据必须继续稳定保持的最短时间。 阅读详情

线程的生命周期

  • 新建状态(new):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread()
  • 就绪状态(Runnable):当调用线程对象的start()方法,线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行
  • 运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中。
  • 阻塞状态(blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
  1. 等待阻塞 – 运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
  2. 同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态
  3. 其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态
  • 死亡状态(Dead): 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

创建线程的几种方式

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
  4. 线程池 或Future (FutureTask)

线程之间的调度和通信

  • Join()
    线程加入,从当前线程中加入一个线程,当前线程等待加入的线程执行完毕在执行;即在当前线程调用另一个线程的join()方法,则当前线程处于阻塞状态,
    等待另一个线程执行完毕后 当前线程从阻塞状态转入就绪状态等待cpu的调度
    join()是Thread的一个方法
public final synchronized void join(long millis)
  • Sleep(long millis)
    线程睡眠,让当前线程睡眠,从运行状态转入到阻塞状态;注意:sleep方法不会释放锁
     public static native void sleep(long millis) throws InterruptedException;
    
  • yield()
    线程让步,让当前线程停止,由运行状态转入到就绪状态从新等待cpu的调度,yield方法不会释放锁
	  public static native void sleep(long millis) throws InterruptedException;
  • interrupt()
    线程中断,中断当前线程 设置中断线程标记 为true;
    如果当前线程处于阻塞状态,例如调用 wait, join, sleep等阻塞方法 如果中断线程会抛异常InterruptedException
    如果当前线程在进行io操作,中断线程会抛ClosedByInterruptException
    通过线程的中断标志来控制线程 例如
while(!isInterrupted()) {
 ...
}
  • wait()
    使当前线程处于等待阻塞状态,直到其他线程调用该同步锁对象的notify() 或者notifyAll() 方法唤醒
  public final void wait() throws InterruptedException

当前线程必须拥有该对象的监视器; 就是说当前线程必须处于线程同步中,或者说处于synchronized 修饰的方法或代码块中
当调用wait方法的时候,当前线程会处于阻塞状态,释放此对象的监视器所有权,即释放锁,等待另一个线程唤醒 从新获取锁 并继续执行
notify()/notifyAll()

   public final native void notify();

和wait一样 必须处于同步代码中;
唤醒和当前线程使用相同的对象锁 并 处于wait()的一个线程,但是 并不释放锁,知道线程结束 才会释放锁;
notifyAll() 则是唤醒所有;

线程优先级
java中的线程优先级的范围是1~10,默认的优先级是5。每个线程默认的优先级都与创建它的父线程具有相同的优先级。默认情况下,mian线程具有普通优先级。“高优先级线程”会优先于“低优先级线程”执行。Thread提供了setPriority(int newPriority)和getPriority()方法来设置和返回线程优先级。
守护线程
java 中有两种线程:用户线程和守护线程。可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是“用户线程”;否则就是“守护线程”。通过setDaemon(true) 来设置为守护线程;用户线程一般用户执行用户级任务,而守护线程也就是“后台线程”,一般用来执行后台任务。需要注意的是:Java虚拟机在“用户线程”都结束后会后退出。

在最新版eclipse中配置使用AI AIcoder _AIcoder配置GPUSTACK使用_配置OLLAMA本地AI模型利用_集合---AI场景应用工作笔记 本文介绍了三款实用的编程辅助工具:一款便捷的反编译插件,可直接在插件市场安装使用;GitHub Copilot提供每月2000次代码补全和50条聊天记录的免费额度,支持智能代码提示功能;aicoder支持配置本地模型运行。这些工具都能有效提升开发效率,其中GitHub Copilot的智能补全功能尤为突出。 阅读详情

相关推荐

嵌入式设备低功耗设计误区:为什么你的RK3568总是被‘意外’唤醒?

本文深入分析RK3568嵌入式设备低功耗设计中的常见误区,重点探讨唤醒源管理不当导致的意外唤醒问题。通过解析硬件设计陷阱、软件配置错误及系统化审计方法,帮助开发者有效排查和解决GPIO配置、唤醒源设置等关键因素引起的功耗异常,提升设备续航能力。

php55的博客 459

Java 线程基础

前言 熟练掌握线程原理与使用是程序员进阶的必经之路,网上很多关于Java线程的知识,比如多线程之间变量的可见性、操作的原子性,进而扩展出的Volatile、锁(CAS/Synchronized/Lock)、信号量等知识。有些文章只说笼统的概念、有些文章深入底层源码令人迷失其中、有些文章只说了其中某个点没有提及内在的联系。 基于以上原因,本系列文章尝试由浅入深、系统性地分析、总结Java线程相关知识,算是加深印象、夯实基础,也算是抛砖引玉。若是相关文章对各位看官有所帮助,幸甚至哉。 通过本篇文章,你将了解到:

1320

基于PlatformIO与CMSIS的STM32库函数开发实战:从环境搭建到外设驱动

本文详细介绍了基于PlatformIO与CMSIS的STM32库函数开发实战,从环境搭建到外设驱动实现。通过对比传统IDE,PlatformIO结合CMSIS框架在跨平台开发、代码可移植性和调试体验上更具优势。文章包含PlatformIO.ini配置详解、GPIO/USART驱动开发实例及常见问题解决方案,帮助开发者高效完成STM32项目开发。

weixin_29190169的博客 420

Java线程基础

Java线程基础知识点,结合韩顺平老师Java线程基础课程所讲知识记的笔记。

m0_51972565的博客 542

STC8单片机低功耗延时优化实践:从循环等待到定时唤醒

本文深入探讨了STC8单片机低功耗延时优化的核心方法,即利用掉电唤醒定时器(WKT)替代传统的循环等待,实现从“空转耗电”到“定时唤醒”的转变。通过实战代码演示了如何编写低功耗延时函数,将待机电流从mA级降至μA级,并分析了精度、唤醒时间等关键权衡点,为电池供电的物联网设备提供了有效的续航优化方案。

pea55的博客 324

避坑指南:C#用S7NetPlus读写西门子PLC字符串(String/WString)的完整方案

本文详细解析了C#通过S7NetPlus读写西门子PLC字符串(String/WString)的完整方案,包括内存布局、编码差异和字节序处理等关键技术细节。提供了实战优化的代码示例和常见问题排查指南,帮助开发者避免乱码、截断等常见陷阱,提升工业自动化项目的开发效率。

weixin_32956805的博客 320

JAVA多线程基础

JAVA多线程基础 1.什么是并发原理? 多线程:多线程允许我们“同时”执行多段代码。 线程是并发运行的,线程调度会统一规划CPU时间,将CPU的时间划分为若干片段,然后尽可能的均匀分配给所要并发运行的线程,每个线程在获取CPU时间片段后CPU就会运行它的任务,当时间片段用完后,Cpu会离开并执行获取到CPu时间片的线程,所以,所有线程并非真正的“同时”运行着代码,而是走走停停,这种微观上走走停停,在宏观上感觉是同步进行的现象称为“并发运行”。 2.创建线程Thread 1. 方式一:继承Thread并重写

weixin_47600732的博客 4277

国产Flash替代方案:手把手教你用XSCT烧写ZYNQ7045的BOOT.BIN(附完整命令解析)

本文详细介绍了国产Flash替代方案在ZYNQ7045上的应用,通过XSCT工具链实现BOOT.BIN的精准烧写。内容涵盖国产Flash兼容性检查、PetaLinux环境搭建、XSCT烧写全流程及故障排查,帮助开发者高效完成国产化替代,提升硬件开发效率。

weixin_33670786的博客 422

java基础(线程基础)

并发理解:并发可以看成在某一段时间内是“同时”进行的。在这个时间段内两个进行交替进行(也就是在这个时间段内的每一个时刻都只有一个进程),但在这个时间段外看这两个进程就是“同时”的。进行时例如:早上八点到八点半洗漱,八点半到九点吃早饭,可以说成早上八点到九点洗了漱、吃了早饭,这两个事件同时进行。并行理解:并行就是严格的同一时刻进行多个任务,比如图片中的边打电话边开车。

qq_74930471的博客 886

基于R语言 meta/metafor 包进行荟萃分析(一)

在此部分中,使用连续结果详细描述了通用逆方差方法及其在meta分析中的应用,还介绍了固定效应法和随机效应法。我们已经展示了如何分别将典型数据与metacont和metagen函数一起使用,以及如何print和绘制森林图。我们还讨论了估计研究间方差的各种方法,并将Hartung-Knapp平差描述为经典随机效应方法的替代方法。此外,我们还说明了byvar选项的使用,这使得亚组分析更加简单。关于亚组分析的更多细节见后续章节。

Dunaichuanyi的博客 1万+

YOLOv8知识蒸馏实战:用BCKD和LD在自制数据集上分别提点1.63%和1.69%的保姆级教程

本文详细介绍了在YOLOv8模型上应用知识蒸馏技术(BCKD和LD方法)的实战教程,通过自制数据集实现性能提升1.63%和1.69%。内容涵盖环境配置、模型选择、BCKD和LD的具体实现及调参技巧,适合目标检测领域的开发者和研究者。

weixin_29082143的博客 245

Java基础之——Java 线程

Java 线程 1、创建线程类(方法一) Java使用 java.lang.Thread 类代表线程,所有的线程对象都必须是 Thread 类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java 使用线程执行体来代表这段程序流。 Java 中通过继承 Thread 类来创建并启动多线程的步骤如下: 定义 Thread 类的子类,并重写该类的 run() 方法,该 run() 方法的方法体就代表了线程需要完成的任务,因此把 run() 方法称为线程执行体。

前尘忆梦的博客 5085

【unity实战】使用unity的Navigation+LineRenderer实现一个3D人物寻路提前指示预测移动轨迹的效果,并可以适配不同的地形

本文介绍了在Unity中使用Navigation导航系统和LineRenderer实现3D人物寻路轨迹预测效果的方法。通过NavMesh.CalculatePath计算路径点,结合Physics.Raycast进行地面点投射,将路径点赋予LineRenderer渲染出移动轨迹。关键点包括:1)利用NavMesh.CalculatePath计算两点间可行走路径;2)通过射线检测获取地面点提高路径适配性;3)使用协程定期更新路径绘制。文章还提供了完整代码实现,并说明需要将地面图层设置为Ground并进行导航网格

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 456

深入浅出Java并发编程:线程基础

通过本文的学习,我们详细探讨了Java并发编程中的线程基础,包括进程与线程的区别、线程的创建方式线程的生命周期守护线程与用户线程、以及线程优先级与调度策略。掌握这些基础知识是进一步学习并发编程的关键。在实际开发中,理解并正确使用这些概念可以帮助我们构建高效、稳定的多线程应用。然而,并发编程的复杂性远不止于此,后续我们还将深入探讨线程安全、锁机制、线程通信等高级主题。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1933

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

『Java多线程』基础之基础

Java基础篇~多线程 线程概念 程序(Program) ​ 程序是指令、数据及其组织形式的描述,也就是存储在磁盘或者其他存储设备中含有指令和数据的文件,是一段静态代码 进程(Process) ​ 进程是受操作系统管理的基本单元,是程序的一次动态执行过程,是系统进行资源分配和调度的基本单位,它对应了从代码加载、执行到执行完毕的整个过程,即进程的创建、运行到消亡的过程。从某种程度上来说,进程是正在运行程序的实例,是一个动态概念 多任务(Multi Task) ​ 在一

像写诗一样优雅地写代码~ 7640

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java 线程 基础知识总结

文章目录线程基础生产消费者模型,synchronizedjoin方法+死锁(哲学家进餐问题)join和锁死锁有趣的Timer类Timer多线程的一个运行实例 初步认识下线程,线程怎么去实现(通过继承Thread或者实现Runnable接口) 线程基础 很不严谨的说,线程是什么?线程就是为了让很多个东东并发执行,大大的提高程序执行的效率啊 三个非常重要的概念: 程序:一组写好了的静态代码块(就我...

Zhangguohao666的博客 6812

Java基础知识-线程篇

Java线程池是一种用于管理和重用线程的机制,它提供了一种在执行大量异步任务时有效控制线程的方式。使用线程池可以避免频繁创建和销毁线程所带来的性能开销,并能提高程序的响应速度。除了上述几种预定义的拒绝策略外,你也可以通过实现接口来定义自己的拒绝策略。这个接口只有一个方法:通过实现方法,你可以在拒绝策略触发时自定义处理逻辑,例如记录日志、将任务重新放回队列等。

qq_71748390的博客 1370

java线程(基础)

java线程(基础) 程序:可以理解为是一组静态的代码 进程:正在进行的程序 静态的代码 运行起来 线程:正在执行程序中的小单元 1.主线程 系统线程 2.用户线程 main 3.守护线程(精灵) GC 线程------操作系统级别 CPU 如何在Java中创建线程 让线程执行 多线程 掌握每一个线程的几种不同状态 及状态之间如何切换 new start() CPU分配run() wait() exception over 创建线程---

spandman的博客 231

【Java】JUC并发(线程基础、线程的状态)

本文介绍了Java线程的基础知识和应用方法。主要内容包括:1)线程基本概念,区分了程序、进程和线程,比较了进程与线程的区别,解释了并发与并行;2)单线程与多线程的实现方式;3)线程的创建与启动方法;4)三种线程实现方式:继承Thread类、实现Runnable接口、实现Callable接口;5)线程池的使用;6)线程命名和休眠操作;7)线程的六种状态。通过代码示例演示了各种线程操作的具体实现,为Java多线程编程提供了基础指导。

m0_74244697的博客 681

初学Java之线程基础

一篇搞定线程基础提示以下是本篇文章正文内容,下面案例可供参考就是完成特定任务,用某种语言编写的一组指令的集合----->我们所写的代码。(1)进程就是指正在运行的程序,比如我们打开微信,使用微信时,就启动了一个进程。(2)进程是程序的一次执行的过程,是动态过程,它具有自己的产生、存在和消亡的过程。这就是一个个进程以上就是线程基础部分啦,欢迎大家讨论。...

jmgufss的博客 348

05. java线程基础

本篇文章讲述了Java的线程基础,内容有:线程相关概念、线程基本使用、继承Thread和实现Runnable接口的区别、线程终止、线程常用方法、线程的生命周期、线程同步、互斥锁、线程死锁、释放锁等等,包括案例细内容。在Java中线程是一个很大的板块,这里旨在帮你快速入门线程

m0_54915265的博客 1763

Java 并发 - 线程基础

本文主要概要性的介绍线程的基础,为后面的章节深入介绍Java并发的知识提供基础。

qq_63353796的博客 1149

⛳ Java多线程 一,线程基础

在计算机科学中,程序(Program),进程(Process)和线程(Thread)是三个重要的概念,它们都与执行计算机任务和程序相关。程序(Program):程序是一系列指令的集合,这些指令按照特定的顺序组织,用于完成特定的任务或执行特定的操作。程序是静态的,它们只是存储在计算机磁盘或存储设备中,并不直接执行。当我们想要运行一个程序时,操作系统会将程序加载到内存中,并将其转换为进程,然后才能执行其中的指令。进程(Process):进程是计算机程序在执行时的实例。

松柏123的博客 587
上一篇: JAVA内存模型(JMM)
下一篇: Synchronized和volatile以及final语义
xiaoduup
博客等级 码龄9年 23粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值