当前位置:网站首页>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
修改后的代码
测试结果
边栏推荐
- LeetCode 6. Z 字形变换 找规律
- 学习在微信小程序中判断url的文件后缀格式
- MySQL binlog都有哪些模式?
- iMeta | Baidu certification is completed, search "iMeta" directly to the publisher's homepage and submission link
- XCTF-reverse-signin
- 冰蝎逆向初探
- 在 .NET MAUI 中如何更好地自定义控件
- 字符串相关题目
- 请问同一个oracle cdc表,如果flink job重新提交,是会全量读取一遍源数据还是增量呢?
- 江西发布紧急通知:全面开展涉校涉生安全隐患大排查
猜你喜欢
随机推荐
HTB-Sense
HCIP 第十七天
双指针方法
rk3399-339 usb设备复合 总体流程
nsq部署_andlua辅助源码
华为云安全云脑,让企业云化运营更放心
广东对小鹏/广汽丰田开展网络安全检查
safe-point(safepoint 安全点) 和 safe-region(安全区域)「建议收藏」
无代码平台描述文字入门教程
[easyUI]修改datagrid表格中的值
LeetCode 6. Z 字形变换 找规律
Why are all hotel bathrooms transparent?
CompletableFuture接口核心方法介绍
LVS+Keepalived群集部署
MySQL之my.cnf配置文件
Camunda整体架构和相关概念
在 .NET MAUI 中如何更好地自定义控件
Jina 实例秀|基于神经搜索的网络安全威胁检测(一)
EastWave应用:自动计算光子晶体透反率
航企纠缠A350安全问题 空客主动取消飞机订单