关于Lock锁的讲解,与不懂之处
Synchronized和Lock区别 1.Synchronized 内置的java关键字,lock是一个java类 2.Synchronized 无法判断获取锁的状态,Lock可以判断是否获取到了锁 3.Synchronized 会自动释放锁,lock必须要手动释放锁,如果不是放就会发生死锁问题 4.Synchronized 线程1(获得锁,阻塞),线程2(等待,傻傻的等);Lock锁就不一定等待下去 lock.tryLock() 5.Synchronized 可重入锁,不可中断,非公平的;lock,可重入锁,可以判断锁,非公平(可以自己设置,默认是非公平的) 6.Synchronized 适合所少量的代码同步问题,Lock适合所大量的同步代码
但是我在写一个生产者和消费者问题的时候发现了一个问题,和上面的Lock锁手动释放,否则将会出现死锁问题相违背 ,代码如下。那位大佬可以帮忙解释一下呢,谢谢了!
public class SaleTicketDemo01 {public static void main(String[] args) {//创建一张票Ticket ticket = new Ticket();new Thread(()->{for(int i = 0;i<60;i++) {ticket.sale();}},"A").start();new Thread(()->{for(int i = 0;i<60;i++) {ticket.sale();}},"B").start();new Thread(()->{for(int i = 0;i<60;i++) {ticket.sale();}},"C").start();} } //资源类 OOP class Ticket{//属性private int number = 50;//创建一个锁//这是一个正常的锁Lock lock = new ReentrantLock();//买票的方式//所得方式/** lock.lock;* try{}catch(){}finally{}* */public void sale() {//加锁lock.lock();try {if (number > 0) {System.out.println(Thread.currentThread().getName() + "买出了" + (number--) + "票,剩余" + number);}} catch (Exception e) {e.printStackTrace();} finally {//解锁//这里我忘了加上释放锁了,但是代码还是可以正确的执行,这是为什么呢?}} }
关于Lock锁的讲解,与不懂之处相关推荐
- 通俗讲解分布式锁,看完不懂算作者输
首先,分布式锁和我们平常讲到的锁原理基本一样,目的就是确保在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm或者说应用中,我们很容易去处理控制,在jd ...
- 通俗讲解分布式锁,看完不懂算我输
点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐 19 个 github 超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 来源:cnblogs ...
- Java并发包JUC的Lock锁讲解
概述 Java有两种锁,一种是使用关键字Synchronized对方法或者代码块进行加锁,一种是使用接口Lock(实际上其实现类)进行上锁和解锁. 区别: Synchronized是java的一个关键 ...
- 深入Lock锁底层原理实现,手写一个可重入锁
synchronized与lock lock是一个接口,而synchronized是在JVM层面实现的.synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,释放锁 . 线程执行发生 ...
- 多线程和线程安全 同步代码 lock锁
多线程:Thread Runnable 并发与并行 •并发:指两个或多个事件在同一个时间段内发生. •并行:指两个或多个事件在同一时刻发生(同时发生). 线程 是程序中的执行线程.Java 虚拟机允 ...
- 线程安全(二)Lock 什么是Lock线程锁?与synchronized区别在哪?Lock锁是如何实现等待通知的?如何实现线程顺序执行?
文章目录 前言 一.synchronized的缺陷 二.Lock接口的特性及基本方法 接口的特性 接口基本的方法: 三.ReentrantLock介绍及实例 ReentrantLock类常见方法: l ...
- Lock锁底层原理实现
synchronized与lock lock是一个接口,而synchronized是在JVM层面实现的.synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,释放锁 . 线程执行发生 ...
- 23.多线程(进程的概述和多进程的意义,线程的概述和多线程的意义,JVM运行原理以及JVM启动的线程探讨,实现多线程 线程调度,线程控制,Lock锁,死锁现象)
1.进程概述及多进程的意义 1.线程和进程 要想说线程,首先必须得聊聊进程,因为线程是依赖于进程存在的. 2.进程概述 什么是进程呢?通过任务管理器我们就可以看到进程的存在. ...
- 【解决线程安全问题:通过Lock锁对象】
[解决线程安全问题:通过Lock锁对象] 参考文章: (1)[解决线程安全问题:通过Lock锁对象] (2)https://www.cnblogs.com/zuixinxian/p/9570409.h ...
最新文章
- 二分法典例:木棒切割问题
- 图解Nosql(hbase)与传统数据库的区别
- syn flood dos
- python批量添加水印_用Python批量添加水印,提高工作效率!
- DevOps运维开发一体化 - 公开课笔记
- linux中s权限大小写的区别,Linux中的权限
- Storm 起步 Zookeeper Storm 单机部署
- matlab积分使用
- response.sendRedirect()与request.getRequestDispatcher().forward()区别
- AngularJS过滤器filter-保留小数-渲染页面-小数点-$filter
- python中文件写入种类及功能方法
- linux sz命令 二进制,ubuntu下rz/sz命令的安装与使用说明
- 深度解析,BIM应用落地,基于BIM的群塔作业方案优化
- 静候 CSDN 佳音
- 安全牛:安全与业务不存在平衡 证明价值是关键
- HDLBITS笔记15:组合逻辑之7420芯片
- vm无法连接虚拟设备sata01_无法连接虚拟设备sata0:1怎样解决?
- win10设置IP地址时,报错了,怎么搞。
- 2011年5月51CTO壁纸点评活动获奖名单【已结束】
- 如何使用Github学生包申请JET BRAINS
热门文章
- 对内置的String类详解.
- OkHttp 内存溢出问题 A connection to xxxxxx was leaked.
- 关于java的特点不正确的是_关于Java语言的健壮性特点,下列说法不正确的是()。A.Java语言是一种强类型语言,即在编译和运行时...
- 【离散数学】集合论 第三章 集合与关系(3) 集合计数的加法原理、容斥原理
- ZooKeeper客户端客户端命令和四字指令操作
- unity塔防游戏怪物转向_皇家冲冲冲游戏下载-皇家冲冲冲游戏安卓版 v1.0.2090
- Python水仙花数,鸡兔同笼问题,百钱买百鸡问题,斐波那契数列,模拟发微信红包
- 遭遇Trojan PSW Lmir等病毒(第4版)
- ccf b类论文相当于sci几区_生物类SCI发表什么期刊?
- 报错 Unsatisfied dependency expressed through field ‘cruisePlanMapper‘ 解决方案