该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

synchronized有几种用法

给方法加锁也就是在声明方法时加上synchronized关键字,这样同时就只能有一个线程访问该方法

其次就是代码块,synchronized(xx){xxx}但是之前我一直不解括号里面的参数是什么..后来自己慢慢翻资料理解了一些,例如

synchronized(this){xxx} this我们都知道是指当前方法的所属类

而synchronized(变量)和synchronized(对象)的意义又是什么呢...经过摸索我发现

synchronized(){}会对2个括号内的内容都进行加锁例如

1.A a = new A();

2.synchronized(a){

3. a.k();

4. System.out,println(a.toString());

5.}

6.a.k();

当有线程执行到synchronized语句时,synchronized会将小括号里面的a对象进行加锁和对大括号里面的所有内容进行加锁,也就是这时即使在大括号外面的第6行代码a.k()实际上也是被锁的

当然如果synchronized(this)的话就代表将整个类都锁上,也就是当有线程执行到该synchronized语句时,其他只要在执行该类的线程都会被堵塞因为整个类都被锁上了

并且synchronized的参数除了要加锁的对象外还可以作为synchronized的名称,大家也都看过下面2种synchronized的写法吧

Object lock = new Object();

synchronized(lock){...}

以及

synchronized有几种用法

给方法加锁也就是在声明方法时加上synchronized关键字,这样同时就只能有一个线程访问该方法

其次就是代码块,synchronized(xx){xxx}但是之前我一直不解括号里面的参数是什么..后来自己慢慢翻资料理解了一些,例如

synchronized(this){xxx} this我们都知道是指当前方法的所属类

而synchronized(变量)和synchronized(对象)的意义又是什么呢...经过摸索我发现

synchronized(){}会对2个括号内的内容都进行加锁例如

1.A a = new A();

2.synchronized(a){

3. a.k();

4. System.out,println(a.toString());

5.}

6.a.k();

当有线程执行到synchronized语句时,synchronized会将小括号里面的a对象进行加锁和对大括号里面的所有内容进行加锁,也就是这时即使在大括号外面的第6行代码a.k()实际上也是被锁的

当然如果synchronized(this)的话就代表将整个类都锁上,也就是当有线程执行到该synchronized语句时,其他只要在执行该类的线程都会被堵塞因为整个类都被锁上了

并且synchronized的参数除了要加锁的对象外还可以作为synchronized的名称,大家也都看过下面2种synchronized的写法吧

Object lock = new Object();

synchronized(lock){...}

以及

synchronized("xxxxx"){...}

的写法,这样synchronized里面的对象对于程序的逻辑来说起不到任何意义,不过这样写肯定有它的道理,例如

Object lock_1 = new Object();

Object lock_2 = new Object();

synchronized(lock_1){...}

synchronized(lock_1){...}

synchronized(lock_2){...}

这样,有线程执行synchronized(lock_1){...}时那么下面的那个synchronized(lock_1){...}也将会被锁死而synchronized(lock_2){...}不会,这样就起到了一个区分锁的作用

不过大家还是最好先自己试验一下...我不敢保证我说的全部都是对的,如果有误望大家指出

顺便值得一提的是,多个线程被启动时,这些线程执行的run方法都是分别独立的,而不是多个线程在执行一个run方法,这样的话synchronized是无效的也是无意义的,因为以run的角度来看只有一个线程在执行它,而要让synchronized有意义就必须涉及到线程间的资源共享数据传递等,也就是多个线程需要执行一个代码,这样synchronized才是有意义的,通常个人喜欢独立些一个类负责资源共享,而synchronized就是在该类当中起到同步控制的语句

java synchronized 参数_个人对synchronized锁的参数理解,如果有误望指出相关推荐

  1. Java 并发编程_详解 synchronized 和 volatile

    文章目录 1. synchronized 的应用 1.1 基础知识 1.2 synchronized 语法 2. Monitor概念 3. Synchronized原理进阶 3.1 对象头格式 3.2 ...

  2. synchronized原理_面试必备—Synchronized 关键字使用、底层原理

    在并发编程中存在线程安全问题,主要原因有: 1.存在共享数据 2.多线程共同操作共享数据 关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchro ...

  3. iframe的src怎么携带参数_三种传递gRPC动态参数方式的使用体验

    gRPC是一个远程调用框架,使用Protobuf做为信息的载体来完成客户端和服务端的数据传输.关于怎么定义Protobuf消息.搭建gRPC服务在之前的系列文章中都有提及,今天来说一下在使用gRPC和 ...

  4. python函数设置默认参数_深入讲解Python函数中参数的使用及默认参数的陷阱

    这篇文章主要介绍了Python函数中参数的使用及默认参数的陷阱,文中将函数的参数分为必选参数.默认参数.可变参数和关键字参数来讲,要的朋友可以参考下 C++里函数可以设置缺省参数,Java不可以,只能 ...

  5. java jit 编译器_浅谈对JIT编译器的理解。

    1. 什么是Just In Time编译器? Hot Spot 编译 当 JVM 执行代码时,它并不立即开始编译代码.这主要有两个原因: 首先,如果这段代码本身在将来只会被执行一次,那么从本质上看,编 ...

  6. python xgboost参数_如何对XGBoost模型进行参数调优

    匿名用户 1级 2017-01-19 回答 XGBoost参数调优完全指南(附Python代码) 译注:文内提供的代码和运行结果有一定差异,可以从这里下载完整代码对照参考.另外,我自己跟着教程做的时候 ...

  7. 发那科2021参数_三菱发那科常用参数对照表

    1 螺距 2218 2029=2218/2 1821 2 轴名称 1013 1020 3 第二原点 2038 1421 4 2011 1851 5 2012 1852 6 2013 1851 7 20 ...

  8. 120xa变频器调试参数_最全的变频器基本参数的调试都在这了,看过的电工都学会了!...

    点击技成培训置顶,每日7:30准时为您推送 变频器功能参数很多,一般都有数十甚至上百个参数供用户选择.实际应用中,没必要对每一参数都进行设置和调试,多数只要采用出厂设定值即可.但有些参数由于和实际使用 ...

  9. synchronized原理_浅谈synchronized的实现原理

    Synchronized是Java中的重量级锁,在我刚学Java多线程编程时,我只知道它的实现和monitor有关,但是synchronized和monitor的关系,以及monitor的本质究竟是什 ...

最新文章

  1. buildroot mysql
  2. from .filename import class
  3. LNK1000: Internal error during IncrBuildImage 链接错误解决方法
  4. 40. 组合总和 II021(回溯法)
  5. oracle 事务未正常回滚,Spring事务没有回滚异常(Oracle JNDI数据源)
  6. 王道操作系统考研笔记——2.1.8 调度算法的评价指标
  7. scoket多线程例子
  8. matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf
  9. PSPad 免费文本编辑器推荐
  10. The 46th ICPC Asia Jinan Regional Contest,2021,46届济南站热身赛
  11. jdk下没有java源码_openJDK之如何下载各个版本的openJDK源码
  12. openwrt 遇到问题三 高通9531编译过程
  13. MD5加密是什么?为什么不可解密?
  14. 关于一个学习计算机专业,迷茫的大一新生的看法和理解
  15. w7计算机配置在哪里打开,win7的运行在哪里打开 win7打开运行的方法【图文】
  16. 用C++编写个人理财软件
  17. 域格 ASR CAT1 系列 模块驱动安装及升级
  18. Linux自建steam饥荒服务器教程,【图片】Steam饥荒联机版专用服务器快速搭建教程_饥荒联机吧_百度贴吧...
  19. 如何选择ROS机器人平台进行SLAM导航入门:SLAM与ROS的关系
  20. 哪个软件测试手机电池续航好,14部手机电池续航测试:华为P40Pro排名第十小米10Pro倒数第三...

热门文章

  1. 图片来源html,HTML图片(Images)
  2. buffer 与cache 的区别
  3. python文件排序
  4. 矩形内接任意多边形抠图(可以羽化边缘)
  5. 如何理解卷积神经网络中的1*1卷积
  6. Android上使用OpenGLES2.0显示YUV数据
  7. LSD-SLAM 编译过程(Ubuntu 14.04 + ROS Indigo
  8. 傅立叶变换—FFT(cuda实现)
  9. 青龙羊毛——放羊娃(教程)
  10. 青龙面板Nvjdc魔改前段待弹窗---仅支持2.0版本