news 2026/6/11 22:00:56

Java并发编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java并发编程

线程运行原理

每个线程都有自己的栈空间,且互不干扰

只有当所有线程都运行结束,Java进程才会结束

线程的上下文切换

概念:当cpu不在执行当前线程的指令,而是去执行另一个线程的指令

  • 出现的原因
    1.CPU的时间片用光
    2.有更高优先级的线程需要执行
    3.垃圾回收
    4.线程自己调用wait,lock,sleep等(主动)

常见方法

  • sleep
    当前线程由Runnable状态转化为TIME_WAITING
    其他线程可以通过休眠线程的interrupt方法将其打断,打断后会抛出异常,又转化为RUNNABE状态

  • yield
    当前运行中的线程将时间片让给其他线程,其状态转化为runnable,但是如果没有其他处于runnable的线程,依旧不会将按时间片让出去

  • 优先级
    数字越大,优先级越高,抢到时间片的概率越大

  • join()
    线程等待调用这个方法的线程结束后,才继续往下执行

Threadt1=newThread("t1");t1.start();t1.join()//主线程运行到这里的时候,会等待t1线程运行结束后,才继续执行
  • join(long t)
    线程等待方法线程执行完,且最多等t毫秒

  • interrupt ()
    对处于阻塞状态的线程,会让他们抛出异常同时将打断标记重置为false ;对于运行中的线程,只是会将中断标记设置为true,依旧不会影响其正常运行,除非他调用isInterrupt方法,对他自定义做处理

  • isInterrupt()
    判断这个线程是否被打断,打断则返回true

  • interrupted()
    判断线程是否被打断,打断则返回true,且重置为false

  • park()
    线程运行到这里会停止,知道其他线程将其打断

守护线程

当非守护线程执行完成,即使守护线程还有代码没有执行完,也会强制结束

t.setDaemon(true)

线程状态

注意:只有处于Runnable状态的线程,才有资格抢时间片
1.NEW(新建状态,创建线程后但是没有start()线程)
2.Runnable(可运行状态,调用start后,nofity后)
3.BLOCKED(阻塞状态,到线程获取锁失败)
4.WAITING(等待状态,当调用wait()后)
5.TIME_WAITING(时间等待状态,当调用sleep())
6.TERMINATED(终止或销毁状态,当执行完任务后)

Synchronized

注意:Class对象锁和实例锁是两个不同的锁

  • 基础语法
synchronized(对象){临界区}

如果这个对象时静态变量,每个线程都是共享同一把锁,但是如果是局部变量,就相当于每个线程都有自己的锁,相互不影响

个人理解:没有拿到锁的线程,转化为BLOCK状态,且不会参与时间片的分配,这样拿到锁的线程即使时间片用光了,下一次依然还是分配给他,当锁被释放后,其他线程就从BLOCK状态转化为RUNABLE状态,且参与时间片的分配

  • 加在方法上
publicsynchronizedvoidfunc(){....}//等价于publicvoidfunc(){synchronized(this){.....}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 18:39:52

解锁本地实时语音识别:WhisperLiveKit零基础实战指南

解锁本地实时语音识别:WhisperLiveKit零基础实战指南 【免费下载链接】WhisperLiveKit Real-time, Fully Local Speech-to-Text and Speaker Diarization. FastAPI Server & Web Interface 项目地址: https://gitcode.com/GitHub_Trending/wh/WhisperLiveKit …

作者头像 李华
网站建设 2026/6/4 7:15:25

如何在5分钟内用ComfyUI打造专业级视频生成工作流

如何在5分钟内用ComfyUI打造专业级视频生成工作流 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 想要快速上手视频生成技术,却不知从何开始?ComfyUI-WanVideoWrapper正是…

作者头像 李华
网站建设 2026/5/30 10:23:40

Fun-ASR智能家居应用:10元打造语音控制中心

Fun-ASR智能家居应用:10元打造语音控制中心 你是否也和我一样,曾经幻想过像科幻电影里那样,动动嘴就能开关灯、调节空调、播放音乐?但现实是——树莓派跑不动大模型,本地部署延迟高,语音识别不准&#xff…

作者头像 李华
网站建设 2026/5/29 20:39:57

腾讯开源HY-MT1.5-1.8B:翻译模型的技术演进

腾讯开源HY-MT1.5-1.8B:翻译模型的技术演进 1. 引言:轻量级多语翻译的新标杆 随着全球化内容消费的加速,高质量、低延迟的机器翻译需求日益增长。然而,传统大模型在移动端部署面临显存占用高、推理延迟长等现实瓶颈。在此背景下…

作者头像 李华
网站建设 2026/5/29 0:47:02

Supertonic部署优化:减少内存占用的实用技巧

Supertonic部署优化:减少内存占用的实用技巧 1. 背景与挑战 1.1 Supertonic — 极速、设备端 TTS Supertonic 是一个极速、设备端文本转语音(TTS)系统,旨在以最小的计算开销实现极致性能。它由 ONNX Runtime 驱动,完…

作者头像 李华
网站建设 2026/6/7 3:20:08

RISC-V异常处理程序(trap handler)编写完整指南

从零构建 RISC-V 异常处理框架:如何让裸机系统“听懂”中断与异常 你有没有遇到过这样的场景?在一块全新的 RISC-V 开发板上写好一段裸机程序,刚准备点亮 LED,定时器却始终无法触发回调;或者执行一条 ecall 想模拟系…

作者头像 李华