news 2026/10/14 3:07:47

第二周学习:Java并发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第二周学习:Java并发

一、Java线程的生命周期

当新建一个线程的时候,状态为NEW,对这个线程执行start()方法后,状态为RUNNABLE,线程执行完毕后,状态为TERMINATED。还有一种情况也可以实现TERMINATED,就是线程执行过程中报错了。

两个线程执行同一个实例,当线程1先去启动并且拿到锁,执行sleep(1000)方法等待一秒,线程2再去拿就拿不到锁了,因为线程1有等待时间,此时线程1状态为TIMED_WAITING,线程2状态为BLOCKED。

两个线程执行同一个实例,当线程1先去启动并且拿到锁,执行sleep(1000)方法等待一秒后执行wait()方法,线程2执行sleep(1300)方法后再去拿就拿不到锁了,因为线程1等待后wait,没有自动唤醒时间了,会一直等待,此时线程1状态为WAITING,线程2状态为BLOCKED。

补充一点:即使是正在运行,也是RUNNABLE,而不是RUNNING。

二、synchronized

实现线程同步,让多个线程排队依次获取某个资源,保证数据不会出错。

问题:synchronized到底锁定的是什么元素?

答:

1.修饰方法
  • 静态方法:锁定的是类
  • 非静态方法:锁定的是方法的调用者

也就是说,如果synchronized加在类的静态方法中,创建两个类,对这两个类分别创建两个线程,这两个线程会排队等待;如果synchronized加在类的非静态方法中,创建两个类,对这两个类分别创建两个线程,这两个线程不会排队等待,而是各自执行各自的。

2.修饰代码块:锁定的是传入的对象

synchronized(锁定的对象){

}

这个传参传的啥,锁的就是啥。如果是this,锁的就是当前对象,如果是当前对象.class,锁的就是当前类

三、Volatile

1.保证可见性

每个线程有自己的工作内存,现在有一个main线程和线程1,还有一个共享内存i=1,在main线程中对这个共享内存中的i值进行改变,但是线程1不知道,但是加上volatile后,线程1就能知道了

public class VolatileTest { volatile int i = 1; void task1() { System.out.println("开始"); while (i == 1){ } System.out.println("结束"); } public static void main(String[] args) { VolatileTest v = new VolatileTest(); new Thread(v::task1).start(); try { TimeUnit.SECONDS.sleep( timeout: 2); } catch (InterruptedException e) { e.printStackTrace(); } v.i=2; }
2.保证有序性,也叫禁止指令重排序

四、synchronized和Volatile区别

1、Synchronized关键字,用来加锁。Volatile只是保持变量的线程可见性。通常适用于一个线程写,多个线程读的场景。
2、Volatile不能保证线程安全。

五、ThreadPoolExecutor

核心线程池数、最大线程池数、非核心线程池数(最大线程池数-核心线程池数)、阻塞队列、异常处理策略(报错)

当核心线程池满了,任务进入到阻塞队列,当阻塞队列也满了,开始创建非核心线程池,当非核心线程池也满了,执行异常处理策略。有一点需要注意,因为执行速度是非常快的,所以可能下一个任务进去时,核心线程池中的任务已经执行完毕了,不会触发异常处理策略。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 3:07:41

Agent 的意图识别到底是什么?别再让所有提问都白烧大模型的钱

很多开发者做 Agent 应用,第一反应就是把用户输入直接丢给大模型。跑起来确实快,但上线第一天成本报表就会教你做人。今天聊一个被严重低估的工程问题——意图识别,以及怎么设计一套分层路由,让 80% 的请求根本不需要碰大模型。 0…

作者头像 李华
网站建设 2026/10/14 3:07:14

数据结构:树和二叉树的概念和性质

文章目录前言1. 树的定义2. 树的相关概念2.1 结点间的关系描述2.2 结点和树之间的属性描述3. 树的性质3.1 性质一:树中的结点数 所有结点的度数之和 13.2 性质二:m 叉树中第 i 层上至多有 mi−1m^{i-1}mi−1 个结点(i ≥ 1)3.3 …

作者头像 李华
网站建设 2026/10/14 3:06:27

护眼之星4.2便携版完整指南:安装、配置与自动化护眼调参

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 3:05:45

IEEE14节点潮流计算Matlab实现:从导纳矩阵到牛顿-拉夫逊法

简介:这份Word文档是《基于Matlab的IEEE14节点潮流计算程序》的配套说明书,面向电力系统分析课程学习者与需要完成大作业的学生,帮助理解程序结构、算法原理与节点数据拓扑。文档以论文格式排版,包含目录、摘要、正文与参考文献&a…

作者头像 李华