当前位置:网站首页>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
修改后的代码
测试结果
边栏推荐
- 航企纠缠A350安全问题 空客主动取消飞机订单
- 参数优化文档介绍
- 请问下Flink SQL如何写hologres分区表?我想要每天一个分区
- Qt:小的任务管理器(task)
- 再次搞定 Ali 云函数计算 FC
- 2022 Cloud Native Computing代表厂商 | 灵雀云第三次入选Gartner中国ICT技术成熟度曲线报告
- redis解决分布式session问题
- 无代码平台描述文字入门教程
- v-model原理,在“radio”、“checkbox”、“select”、修饰符
- [论文翻译] Unpaired Image-to-Image Translation using Adversarial Consistency Loss
猜你喜欢
随机推荐
LeetCode 6. Z 字形变换 找规律
XCTF-easy_Maze
请问同一个oracle cdc表,如果flink job重新提交,是会全量读取一遍源数据还是增量呢?
STM32前言知识总结
LeetCode中等题之旋转图像
参数优化文档介绍
【cookie 临时存储数据,WebStorage ,sessionStorage】
暴力破解ssh/rdp/mysql/smb服务
Libtomcrypt AES 加密及解密
学习使用php把stdClass Object转array的方法整理
解决:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING
华为开源:聚焦开源基础软件,共建健康繁荣生态
bash shell数组详解
2万字50张图玩转Flink面试体系
ThreadLocal详细分析
冰蝎工具开发实现动态二进制加密WebShell
LeetCode 54. 螺旋矩阵 蛇形矩阵式输出字符串
MySQL之my.cnf配置文件
MySQL核心SQL:结构化查询语句SQL、库操作、表操作、CRUD
Apache Calcite 框架原理入门和生产应用