当前位置:网站首页>JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
2022-08-04 10:22:00 【51CTO】

1、线程和进程
- 进程:一个程序,微信、qq、、、程序的集合。(一个进程包含多个线程,至少包含一个线程。java默认有两个线程:主线程(main)、垃圾回收线程(GC)
- 线程:runnable、thread 、callable
java开不了线程,在源码中可以看出,调用的是底层的方法

2、并发和并行
- 并发:交替
- 并行:同时(同一个时间)
并发编程的本质:充分利用cpu的资源
3、线程的状态
看源码
- 新生
- 运行
- 阻塞
- 等待,(死死的等)
- 超时等待
- 终止
4、sleep和wait的区别
- sleep来自thread。wait来自object
- wait会释放锁,sleep不会释放锁
- wait只能在同步代码块中,sleep可以在任意地方睡
5、Lock锁
Lock接口

public interface Lock
Lock实现提供比使用synchronized方法和语句可以获得的更广泛的锁定操作。 它们允许更灵活的结构化,可能具有完全不同的属性,并且可以支持多个相关联的对象Condition 。
锁是用于通过多个线程控制对共享资源的访问的工具。 通常,锁提供对共享资源的独占访问:一次只能有一个线程可以获取锁,并且对共享资源的所有访问都要求首先获取锁。 但是,一些锁可能允许并发访问共享资源,如ReadWriteLock的读锁。
使用synchronized方法或语句提供对与每个对象相关联的隐式监视器锁的访问,但是强制所有锁获取和释放以块结构的方式发生:当获取多个锁时,它们必须以相反的顺序被释放,并且所有的锁都必须被释放在与它们相同的词汇范围内。
虽然synchronized方法和语句的范围机制使得使用监视器锁更容易编程,并且有助于避免涉及锁的许多常见编程错误,但是有时您需要以更灵活的方式处理锁。 例如,用于遍历并发访问的数据结构的一些算法需要使用“手动”或“链锁定”:您获取节点A的锁定,然后获取节点B,然后释放A并获取C,然后释放B并获得D等。 所述的实施方式中Lock接口通过允许获得并在不同的范围释放的锁,并允许获得并以任何顺序释放多个锁使得能够使用这样的技术。

synchronized和lock的区别
- 1、synchronized内置的java关键字,lock是一个java类
- 2、synchronized 无法判断获取锁的状态,lock锁可以判断是否获取到了锁
- 3、synchronized会自动释放锁,lock必须要手动释放锁,如果不释放锁,死锁
- 4、synchronized 线程1获得锁,阻塞,线程2 傻傻的等。lock锁就不一定会等下去;会试图获取锁
- 5、synchronized 可重入锁,不可以中断,非公平:lock,可重入锁可以判断锁,非公平
- 6、synchronized 适合锁少量的代码同步问题,lock适合锁大量的同步代码

6、买票问题
7、生产者和消费者问题



8、使用condition替换synchronized


修改后的代码
测试结果

边栏推荐
- MySQL core SQL: SQL structured query statements, library, table operation, CRUD
- 常用的输入对象
- MindSpore:Batchnorm only support nchw input!
- IDEA启动热部署
- safe-point(safepoint 安全点) 和 safe-region(安全区域)「建议收藏」
- 《福格行为模型》:如何养成好习惯?
- MySQL: Integrity Constraints and Table Design Principles
- LeetCode中等题之设计循环队列
- 2万字50张图玩转Flink面试体系
- 昨夜梦佳人,七夕试伊妆丨基于ModelArts实现AI妆容迁移丨【玩转华为云】
猜你喜欢
随机推荐
多了<audio controls=
渗透——信息收集
一文带你了解 ESLint
canvas画图时的bug记录
[论文翻译] Unpaired Image-to-Image Translation using Adversarial Consistency Loss
MySQL核心SQL:结构化查询语句SQL、库操作、表操作、CRUD
[代码阅读] CycleGAN: Unpaired Image-To-Image Translation Using Cycle-Consistent Adversarial Networks
《迁移学习导论》第2版,升级内容抢先看!
TCP协议 - 三次握手 - 四次挥手-内核参数调优
无线Mesh自组网方案,CV5200无线模组应用,支持高清数据远距离传输
IDEA启动热部署
pyvista 的介绍与使用
线程必备内容
C#/VB.NET:在 Word 中设置文本对齐方式
MySQL:面试问的范式设计
使用ClickHouse分析COS的清单和访问日志
【c】操作符详解(二)
STM32前言知识总结
JDBC知识点
参数优化文档介绍









