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锁的讲解,与不懂之处相关推荐

  1. 通俗讲解分布式锁,看完不懂算作者输

    首先,分布式锁和我们平常讲到的锁原理基本一样,目的就是确保在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm或者说应用中,我们很容易去处理控制,在jd ...

  2. 通俗讲解分布式锁,看完不懂算我输

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐 19 个 github 超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 来源:cnblogs ...

  3. Java并发包JUC的Lock锁讲解

    概述 Java有两种锁,一种是使用关键字Synchronized对方法或者代码块进行加锁,一种是使用接口Lock(实际上其实现类)进行上锁和解锁. 区别: Synchronized是java的一个关键 ...

  4. 深入Lock锁底层原理实现,手写一个可重入锁

    synchronized与lock lock是一个接口,而synchronized是在JVM层面实现的.synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,释放锁 . 线程执行发生 ...

  5. 多线程和线程安全 同步代码 lock锁

     多线程:Thread Runnable 并发与并行 •并发:指两个或多个事件在同一个时间段内发生. •并行:指两个或多个事件在同一时刻发生(同时发生). 线程 是程序中的执行线程.Java 虚拟机允 ...

  6. 线程安全(二)Lock 什么是Lock线程锁?与synchronized区别在哪?Lock锁是如何实现等待通知的?如何实现线程顺序执行?

    文章目录 前言 一.synchronized的缺陷 二.Lock接口的特性及基本方法 接口的特性 接口基本的方法: 三.ReentrantLock介绍及实例 ReentrantLock类常见方法: l ...

  7. Lock锁底层原理实现

    synchronized与lock lock是一个接口,而synchronized是在JVM层面实现的.synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,释放锁 . 线程执行发生 ...

  8. 23.多线程(进程的概述和多进程的意义,线程的概述和多线程的意义,JVM运行原理以及JVM启动的线程探讨,实现多线程 线程调度,线程控制,Lock锁,死锁现象)

    1.进程概述及多进程的意义 1.线程和进程     要想说线程,首先必须得聊聊进程,因为线程是依赖于进程存在的. 2.进程概述     什么是进程呢?通过任务管理器我们就可以看到进程的存在.      ...

  9. 【解决线程安全问题:通过Lock锁对象】

    [解决线程安全问题:通过Lock锁对象] 参考文章: (1)[解决线程安全问题:通过Lock锁对象] (2)https://www.cnblogs.com/zuixinxian/p/9570409.h ...

最新文章

  1. 二分法典例:木棒切割问题
  2. 图解Nosql(hbase)与传统数据库的区别
  3. syn flood dos
  4. python批量添加水印_用Python批量添加水印,提高工作效率!
  5. DevOps运维开发一体化 - 公开课笔记
  6. linux中s权限大小写的区别,Linux中的权限
  7. Storm 起步 Zookeeper Storm 单机部署
  8. matlab积分使用
  9. response.sendRedirect()与request.getRequestDispatcher().forward()区别
  10. AngularJS过滤器filter-保留小数-渲染页面-小数点-$filter
  11. python中文件写入种类及功能方法
  12. linux sz命令 二进制,ubuntu下rz/sz命令的安装与使用说明
  13. 深度解析,BIM应用落地,基于BIM的群塔作业方案优化
  14. 静候 CSDN 佳音
  15. 安全牛:安全与业务不存在平衡 证明价值是关键
  16. HDLBITS笔记15:组合逻辑之7420芯片
  17. vm无法连接虚拟设备sata01_无法连接虚拟设备sata0:1怎样解决?
  18. win10设置IP地址时,报错了,怎么搞。
  19. 2011年5月51CTO壁纸点评活动获奖名单【已结束】
  20. 如何使用Github学生包申请JET BRAINS

热门文章

  1. 对内置的String类详解.
  2. OkHttp 内存溢出问题 A connection to xxxxxx was leaked.
  3. 关于java的特点不正确的是_关于Java语言的健壮性特点,下列说法不正确的是()。A.Java语言是一种强类型语言,即在编译和运行时...
  4. 【离散数学】集合论 第三章 集合与关系(3) 集合计数的加法原理、容斥原理
  5. ZooKeeper客户端客户端命令和四字指令操作
  6. unity塔防游戏怪物转向_皇家冲冲冲游戏下载-皇家冲冲冲游戏安卓版 v1.0.2090
  7. Python水仙花数,鸡兔同笼问题,百钱买百鸡问题,斐波那契数列,模拟发微信红包
  8. 遭遇Trojan PSW Lmir等病毒(第4版)
  9. ccf b类论文相当于sci几区_生物类SCI发表什么期刊?
  10. 报错 Unsatisfied dependency expressed through field ‘cruisePlanMapper‘ 解决方案