学习-java多线程

线程的创建

*继承Tread,重写run

*实现Runnable接口,重写run() [匿名内部类]

*实现callable接口(有结果返回)

线程的常用方法

调用join保证这个方法先执行完成,

线程安全

并发编程

进程 :就相当一个程序的实例
线程 :就是指令流(一个进程包含多个线程)

并发 :同一时间。一个cpu轮流执行
并行:两cup同时工作

lamda简化匿名内部类的写法

JVM :堆,栈,方法区
:是线程用的,(后进先出)(执行完就会释放)
*有多个栈帧 组成,对应着每次方法 调用时所占的内存
*每个线程只能有一个活动栈帧,对应正在执行的方法
递归会导致栈溢出
一个线程一个栈,一个方法一个栈帧

栈和栈帧
程序启动 在jvm的加载机制

1,将代码加载到 方法区(类加载)
2,栈启动mian主线程: 然后给线程的方法分配栈帧
new出来的对象放堆,方法执行完栈帧就会释放
线程的栈帧是独立的(程序计数器 记录每个线程的执行到哪里-记录当前线程的状态**)
操作系统的任务调度器 分配时间片**

上下文切换
让出cpu的时候
程序计数器d
记录当前线程的状态等信息(局部变量,等)

频繁的切换会影响性能

常见方法

start() 线程进入就绪状态 不能多次启动 会报错

run 新线程启动后会调用

join 等待线程运行结束

优先级(1-10)默认5-(cup空闲的时候 几乎没有用)

getStatus

isAlive

线程的状态有哪些5种
1, new
2, runnable就绪(
3, running运行

4 阻塞
5, Terminated终止

java线程的状态有哪些6种
1, new
2, runnable就绪()运行中的
3, blocked 阻塞 (synchronize)
4, Waiting 等待-要唤醒 (join)
5, Timed Waiting 计时等待 -阻塞(sleep)
**6,**Terminated终止

sleep:

*调用会 计时等待 (线程状态:runing变Timed Waiting(阻塞让出cup ):类似于等待状态

*通过其他线程调用interrupted(),打断睡眠(会抛interrupted异常)

*睡眠结束后 未必立即执行(让出cup)

*TimeUnit的sleep可读性更好 可以替换thread的sleep

*阻塞线程

yield:
*
调用会 计时等待 (线程状态:runing变runable(就绪))让出cup 如果没有其他操作还是会执行

*让给优先级高的,

*不阻塞线程

join

*等待线程运行结束-达到同步的目的,

*阻塞线程
join(long tim)最多等待
interrupt 打断

打断阻塞的线程 例如 sleep,wait,join

异常打断:(打断标记 flose)例如程序在执行sleep的时候 清除标记

正常常打断:(打断标记 true)
isinterrupt不会清除标记

park 停止

打断标记为真的时候 失效

守护线程

*正常:java要等待所有线程结束才会结束,(不然主线程结束 子线程一样执行)

*如果非守护线程都结束,守护线程也强制结束(如果子线程是守护线程,主线程结束他也结束)

-垃圾回收就是守护线程

共享模型

synchronize工作

*monitor(监控系统提高的)重量级锁

*轻量级锁(翻书包看看是谁的)

*偏向锁(写上名字)可以批量修改重偏向

每一次都可能向上升级

轻量级锁: (如果有竞争会升级为重量级) 栈帧是对轻量级锁的实现

*访问时间是错开的

锁膨胀 :就是尝试加轻量级锁失败,升级为重量锁

重入锁:就是同一个对象再次如锁+1

相关推荐
我没想到原来他们都是一堆坏人几秒前
(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
java·前端·python
搞一搞汽车电子7 分钟前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
萧邀人7 分钟前
第二课、熟悉Cocos Creator 编辑器界面
学习
沙二原住民9 分钟前
提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
java·数据库·oracle
Jerry&Grj34 分钟前
SpringBoot埋点功能技术实现方案深度解析:架构设计、性能优化与扩展性实践
java·微服务·性能优化·springboot·架构设计·埋点技术
没有bug.的程序员40 分钟前
Redis Stream:轻量级消息队列深度解析
java·数据库·chrome·redis·消息队列
m0_5713728243 分钟前
嵌入式ARM架构学习2——汇编
arm开发·学习
总有刁民想爱朕ha1 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘
用户8160791833331 小时前
告别“魔法”:包你解决 Gradle 的下载慢问题
java
小菜全2 小时前
uniapp新增页面及跳转配置方法
开发语言·前端·javascript·vue.js·前端框架