java之锁问题:
学习B站狂神视频总结:
代码不执行,仅示例参考

import java.util.concurrent.TimeUnit;public class Lock {public static void main(String[] args) {Phone phone = new Phone();Phone phone1 = new Phone();Phone phone2 = new Phone();new Thread(()->{//phone.sendSms();phone1.sendSms();},"A").start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}new Thread(()->{//phone.call();phone2.call();},"B").start();}
}
class Phone{public static synchronized void sendSms(){try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("发短信");}public static synchronized void call(){System.out.println("打电话");}public void listening(){System.out.println("听歌");}}

synchronized加锁:重度锁,谁拿到锁就会阻塞,必须执行完才会释放

锁的对象是方法的调用者,谁先拿到谁执行

锁方法的时候:锁的是类的实例,谁先拿到锁谁就执行

注:没有锁的普通方法不受锁的影响

环境:

创建AB线程,休眠1毫秒,控制A先创建B后创建

两个方法:发短信需要4毫秒休眠才执行,打电话直接执行

序号 同步方法 静态同步方法 对象 执行结果分析
1 2 1 发短信:一把锁,线程A先拿到锁先执行
2 2 2 打电话:两把锁,发短信不需要睡眠先执行
3 2 1 发短信:唯一类锁, 线程A先拿到
4 2 2 发短信:唯一类锁, 线程A先拿到
5 1 1 1 打电话:两个锁,一个锁类模板,一个锁调用者,不存在线程等待问题,按照方法睡眠时间执行
6 1 1 2 打电话:两个方法用的不是同一个锁,互不影响

1.两个同步方法;一个对象

2.两个同步方法;两个对象(即两个调用者,两把锁)

​ 此时根据睡眠时间执行

3.两个静态同步方法(static):static方法在类加载时就有了,锁的是Class对象(每个类唯一);

​ 两个静态同步方法,如果是两个对象

​ 也只有一个类模板,锁的是Class;不受创建对象数量的影响

4.普通同步方法,静态同步方法,一个对象

​ 普通同步方法 锁的是Class模板

​ 静态同步方法 锁的是调用者

​ 两个方法用的不是同一个锁,互不影响

5.普通同步方法,静态同步方法,两个对象

​ 普通同步方法 锁的是Class模板

​ 静态同步方法 锁的是调用者

​ 两个方法用的不是同一个锁,互不影响

总结:

new :具体的对象

static:唯一的Class模板

如果是同一个锁,就看谁先拿到锁;如果不是同一个锁,就看睡眠了

java多线程------锁相关推荐

  1. Java多线程 - 锁

    Java多线程 - 锁 三性 可见性 指的是线程之间的可见性,一个线程对状态的修改,对其他线程是可见的.在 Java中 volatile.synchronized 和 final 实现可见性. 原子性 ...

  2. Java多线程锁技术漫谈:乐观锁VS悲观锁

    Java多线程技术一直是Java程序员必备的核心技能之一.在Java多线程编程中,为了保证数据的一致性和安全性,常常需要使用锁的机制来防止多个线程同时修改同一个共享资源.锁是实现并发访问控制的一种机制 ...

  3. [java多线程] - 锁机制同步代码块信号量

    在美眉图片下载demo中,我们可以看到多个线程在公用一些变量,这个时候难免会发生冲突.冲突并不可怕,可怕的是当多线程的情况下,你没法控制冲突.按照我的理解在java中实现同步的方式分为三种,分别是:同 ...

  4. Java多线程-锁的概念

    1.结婚戒指的意义 根据文献记载,最早使用戒指人就是希腊的悲剧英雄--被缚的普罗米修斯.宙斯为惩罚普罗米修斯盗火给人类,将他绑缚在考卡苏斯山上,每天都有一只老鹰飞到山上,将他的内脏啄出,到了夜晚,他所 ...

  5. java多线程之锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁

    转载至:https://blog.csdn.net/zqz_zqz/article/details/70233767 之前做过一个测试,详情见这篇文章<多线程 +1操作的几种实现方式,及效率对比 ...

  6. java同步锁synchronized_Java对象锁和类锁全面解析(多线程synchronized关键字)

    本文主要是将synchronized关键字用法作为例子来去解释Java中的对象锁和类锁.特别的是希望能帮大家理清一些概念. 一.synchronized关键字 synchronized关键字有如下两种 ...

  7. Java多线程-线程的同步与锁

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. package ...

  8. java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?

    转载自 java多线程中的死锁.活锁.饥饿.无锁都是什么鬼? 死锁.活锁.饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了. 死锁 死锁 ...

  9. Java多线程 ——线程基础和锁锁锁

    Java多线程(一) 一.线程的定义 二.Synchronize线程同步 三.偏向锁.自旋锁.重量级锁 四.volatile关键字 4.1.普通变量运算的物理意义 4.2.有无解决的方案 4.3.vo ...

最新文章

  1. 沈向、洋周明:神经自然语言处理进展综述:建模,学习,推理
  2. 新一轮电信业改革的两条路
  3. python 飞机大战小游戏
  4. struts2下拉框在不同情况下的各种用法
  5. 今日代码(200624)--缺失值处理
  6. spring的基本用法
  7. Java原子操作类AtomicInteger应用场景
  8. linux系统date s使用,简述Linux下date命令的使用方法与实例
  9. FAIR 何恺明、Piotr、Ross等新作,MAE才是YYDS!仅用ImageNet1K,Top-1准确率87.8%!
  10. StringEscapeUtils的资料
  11. 宝宝胆小怎么办,家长怎么做?
  12. 五月康乃馨,爱心献父母---母亲节快乐
  13. Java 后台验证码汉字拼音校验
  14. html让video元素居中,CSS实现元素居中的五种方法
  15. 解密七种html网页加密解密法
  16. ubuntu Anaconda安装gi模块 ValueError: Namespace Gtk not available
  17. 135编辑器导出html,135编辑器教程|三步教你搞定表格样式
  18. StarRocks Analyzer 源码解析
  19. HBUILDERX怎么导入html文件,HBuilderX使用教程 HBuilderX如何导入图片
  20. SEO优化推广的特点

热门文章

  1. 小学数学开灯问题_二年级数学算式大全
  2. 排球比赛计分程序的典型用户和场景
  3. 微信域名防封,微信网址域名防封的几种方法
  4. Jupyter 远程连接服务器
  5. TL-WDN5200H无线usb网卡在ubuntu18.04/16.04上的使用
  6. python听歌识曲爬虫_Python爬取网易云音乐热门评论的搜索结果-阿里云开发者社区...
  7. spring的@Value注解使用
  8. Google AutoValue详解
  9. DL在地球物理中的应用及发展趋势
  10. H5页面的测试点整理