news 2026/2/7 6:11:02

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/2/3 1:52:02

Stable Diffusion避坑指南:云端预装环境避免配置翻车

Stable Diffusion避坑指南:云端预装环境避免配置翻车 你是不是也是一名艺术院校的学生,正为AI绘画作业焦头烂额?明明只是想画几张图交作业,结果三天都在和电脑“斗智斗勇”:CUDA版本不对、PyTorch装不上、Python报错一…

作者头像 李华
网站建设 2026/2/7 17:32:18

ExcalidrawZ:5大核心功能让你爱上Mac手绘创作

ExcalidrawZ:5大核心功能让你爱上Mac手绘创作 【免费下载链接】ExcalidrawZ Excalidraw app for mac. Powered by pure SwiftUI. 项目地址: https://gitcode.com/gh_mirrors/ex/ExcalidrawZ ExcalidrawZ是一款专为Mac用户设计的开源手绘绘图工具,…

作者头像 李华
网站建设 2026/2/5 6:54:56

上拉电阻的选择依据:系统学习阻值计算方法

上拉电阻怎么选?一文讲透阻值背后的工程逻辑你有没有遇到过这样的情况:I2C通信时断时续,示波器一看,上升沿“软趴趴”像拖了尾巴;或者电池供电的设备待机功耗偏高,排查半天发现是某个控制信号一直被上拉“偷…

作者头像 李华
网站建设 2026/2/7 5:07:21

BGE-Reranker-v2-m3一文读懂:检索系统的最后一公里

BGE-Reranker-v2-m3一文读懂:检索系统的最后一公里 1. 技术背景与核心价值 在当前的检索增强生成(RAG)系统中,向量数据库通过语义嵌入实现初步文档召回,但其基于距离相似性的匹配机制存在明显局限。例如,…

作者头像 李华
网站建设 2026/2/6 5:29:32

5分钟部署BAAI/bge-m3,零基础实现多语言语义相似度分析

5分钟部署BAAI/bge-m3,零基础实现多语言语义相似度分析 1. 引言:为什么需要高效的语义相似度模型? 在当前AI应用快速发展的背景下,如何让机器真正“理解”人类语言的含义,成为构建智能系统的核心挑战之一。尤其是在检…

作者头像 李华
网站建设 2026/2/1 5:19:55

Qwen3-VL-8B技术分享:多模态表示学习方法

Qwen3-VL-8B技术分享:多模态表示学习方法 1. 引言:轻量化多模态模型的工程突破 近年来,视觉-语言大模型(Vision-Language Models, VLMs)在图像理解、图文生成、跨模态检索等任务中展现出强大能力。然而,主…

作者头像 李华