news 2026/4/18 5:21:46

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/3/16 4:34:35

DeepSeek-R1-Distill-Qwen-1.5B省钱部署:边缘设备低功耗运行实战案例

DeepSeek-R1-Distill-Qwen-1.5B省钱部署:边缘设备低功耗运行实战案例 1. 引言 随着大模型在实际业务场景中的广泛应用,如何在资源受限的边缘设备上高效部署轻量化模型成为工程落地的关键挑战。DeepSeek-R1-Distill-Qwen-1.5B作为一款经过知识蒸馏优化的…

作者头像 李华
网站建设 2026/4/16 9:22:50

BERT中文理解能力弱?上下文建模增强部署方案详解

BERT中文理解能力弱?上下文建模增强部署方案详解 1. 引言:重新定义中文语义理解的边界 近年来,尽管BERT在英文自然语言处理任务中取得了突破性进展,但其在中文场景下的表现常被质疑“理解能力不足”。这种误解往往源于对模型部署…

作者头像 李华
网站建设 2026/4/17 23:14:31

终极指南:5分钟掌握ib_async异步交易框架

终极指南:5分钟掌握ib_async异步交易框架 【免费下载链接】ib_async Python sync/async framework for Interactive Brokers API (replaces ib_insync) 项目地址: https://gitcode.com/gh_mirrors/ib/ib_async ib_async是一个专为Interactive Brokers API设计…

作者头像 李华
网站建设 2026/4/18 3:48:19

Renren-Fast-Vue企业级管理前端解决方案深度剖析

Renren-Fast-Vue企业级管理前端解决方案深度剖析 【免费下载链接】renren-fast-vue 项目地址: https://gitcode.com/gh_mirrors/ren/renren-fast-vue Renren-Fast-Vue作为一款基于Vue.js和Element-UI构建的现代化前端框架,专为企业级后台管理系统而生&#…

作者头像 李华
网站建设 2026/4/18 3:52:56

终极指南:快速掌握Excalidraw虚拟白板的完整安装与使用

终极指南:快速掌握Excalidraw虚拟白板的完整安装与使用 【免费下载链接】excalidraw Virtual whiteboard for sketching hand-drawn like diagrams 项目地址: https://gitcode.com/GitHub_Trending/ex/excalidraw 想要体验功能强大的虚拟白板工具吗&#xff…

作者头像 李华
网站建设 2026/4/17 5:57:16

Qwen3-Embedding-4B功能实测:100+语言支持表现如何?

Qwen3-Embedding-4B功能实测:100语言支持表现如何? 1. 引言:多语言嵌入模型的现实挑战 随着全球化业务的不断扩展,企业对跨语言语义理解能力的需求日益增长。传统文本嵌入模型在处理非英语语种时普遍存在语义漂移、翻译偏差和上…

作者头像 李华