同步锁

概念:

  • 把有可能出现问题的代码包起来,一次只让一个线程执行。通过sychronized关键字实现同步。

  • 当多个对象操作共享数据时,可以使用同步锁解决线程安全问题。

      synchronized(对象){需要同步的代码;}
    

特点:

  • 前提1,同步需要两个或者两个以上的线程。
  • 前提2,多个线程间必须使用同一个锁。
  • 同步的缺点是会降低程序的执行效率, 为了保证线程安全,必须牺牲性能。
  • 可以修饰方法称为同步方法,使用的锁对象是this。
  • 可以修饰代码块称为同步代码块,锁对象可以任意。

测试:

public class 同步锁synchronized {public static void main(String[] args) {ticket TT =new ticket();Thread t1 =new Thread(TT,"售票员1");Thread t2 =new Thread(TT,"售票员2");t1.start();t2.start();}}class ticket implements Runnable{private int tic =400;@Overridepublic void run() {// 把有线程安全问题的代码,用同步关键字包起来// 原理:用一个对象作为一把锁,给代码上锁,一个线程访问锁代码时,其他线程只能等待锁释放才能进来。// 多线程间要使用同一把锁才可以真的把代码锁住实现线程安全。// synchronized (new Object()) {//锁了不同对象// synchronized (obj) {//锁了同一个对象//synchronized (Ticket2.class) {//锁了本类,针对于静态while (true) {synchronized (this) {if (tic > 0) {//执行卖票操作System.out.println(Thread.currentThread().getName()+"-----"+tic--);}}}}
}

同步锁(synchronized)_37相关推荐

  1. Java同步锁Synchronized底层源码和原理剖析

    目录 1 synchronized场景回顾 2 反汇编寻找锁实现原理 3 synchronized虚拟机源码 3.1 HotSpot源码Monitor生成 3.2 HotSpot源码之Monitor竞 ...

  2. Java线程学习实例——采用同步锁,互斥锁与同步锁的区别,synchronized的使用方法

    栗子来源:https://blog.csdn.net/wenzhi20102321/article/details/52524545 首先对java中同步锁与互斥锁进行区分,主要来源于知乎中的大佬总结 ...

  3. 并发编程之原子性及同步锁

    并发编程之同步锁 一.概述 对之前写的Synchronized详解补充. 如果多个线程在做同一件事情的时候,会出现安全性问题: 原子性 Synchronized, AtomicXXX.Lock 可见性 ...

  4. 【245期】面试官:同类中两个方法加同步锁,多个线程支持同时访问这两个方法吗?...

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...

  5. Java基础知识多线程,同步锁

    多线程 /*多线程: 多任务执行,多路径执行优点:提高性能提高效率进程与线程之间的区别:进程 : 系统中的程序,一个进程之间可以包含1~n个线程,系统中资源分配的最小单位,每个进程都有自己的代码与数据 ...

  6. Java中的锁机制 -- 乐观锁、悲观锁、自旋锁、可重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥锁、同步锁、死锁、锁粗化、锁消除

    文章目录 1. Java中的锁机制 1.1 乐观锁 1.2 悲观锁 1.3 自旋锁 1.4 可重入锁(递归锁) 1.5 读写锁 1.6 公平锁 1.7 非公平锁 1.8 共享锁 1.9 独占锁 1.1 ...

  7. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  8. Java Learning:并发中的同步锁(synchronized)

    引言 最近一段时间,实验室已经倾巢出动找实习了,博主也凑合了一把,结果有悲有喜,BAT理所应当的跪了,也收到了其他的offer,总的感受是有必要夯实基础啊. 言归正传,最近在看到java多线程的时候, ...

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

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

最新文章

  1. apue第四章习题的一些拙见(不定时更新)
  2. POJ 1068 Parencodings 模拟递归
  3. java toolkit invoker_有没有哪位老哥愿意帮一下新人啊
  4. boost::mp11::mp_max_element相关用法的测试程序
  5. 为项目添加autoprefixer
  6. 重新绑定ItemsSource先设置ItemsSource = null;的原因
  7. java中JShell脚本工具、常量优化、集成开发环境IDEA
  8. c语言编程调试找不到路径,VScode 调试C/C++时出现无法打开“X”: 找不到文件(file:///XXXX) 的解决办法...
  9. 收藏 | 用 Keras 实现神经网络来解决梯度消失的问题
  10. 华为向全球发布AI数据库、分布式存储,跑分轻松拿世界第一
  11. 【挨踢人物传】tao61:做一个许三多式的IT攻城狮(第2期)
  12. 团队开发之个人博客五
  13. mysql官网下载页面
  14. Unity3D对象池小案例
  15. kubernetes系列之一:Kubernetes如何利用iptables对外暴露service
  16. AccessibilityService的学习,抢红包实现
  17. 《幸运大转盘》代码分享
  18. R in Action 学习笔记 - 第九章-Analysis of Variance
  19. spring源码分析01-(前期准备)spring核心原理解析和手写简易spring
  20. 用哈密顿量算符理解弱相互作用下宇称不守恒

热门文章

  1. python基础 多点坐标 绘制折线图 计算两点距离
  2. android开发 java.lang.IllegalStateException at android.media.MediaPlayer._prepare(Native Method)
  3. flutter显示图标_flutter 引入第三方 Icon 图标(以阿里图标库为例)
  4. dnw for linux(pc)
  5. rk3288芯片简介
  6. 数据库(Mysql)学习
  7. 提交到GitHub错误:src refspec 分支名 does not match any
  8. 程序员如何在技术上提升自己
  9. c# char unsigned_关于C ++:将unsigned char *复制到unsigned char *
  10. java 抽象类和接口——抽象类