java synchronized 参数_个人对synchronized锁的参数理解,如果有误望指出
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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锁的参数理解,如果有误望指出相关推荐
- Java 并发编程_详解 synchronized 和 volatile
文章目录 1. synchronized 的应用 1.1 基础知识 1.2 synchronized 语法 2. Monitor概念 3. Synchronized原理进阶 3.1 对象头格式 3.2 ...
- synchronized原理_面试必备—Synchronized 关键字使用、底层原理
在并发编程中存在线程安全问题,主要原因有: 1.存在共享数据 2.多线程共同操作共享数据 关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchro ...
- iframe的src怎么携带参数_三种传递gRPC动态参数方式的使用体验
gRPC是一个远程调用框架,使用Protobuf做为信息的载体来完成客户端和服务端的数据传输.关于怎么定义Protobuf消息.搭建gRPC服务在之前的系列文章中都有提及,今天来说一下在使用gRPC和 ...
- python函数设置默认参数_深入讲解Python函数中参数的使用及默认参数的陷阱
这篇文章主要介绍了Python函数中参数的使用及默认参数的陷阱,文中将函数的参数分为必选参数.默认参数.可变参数和关键字参数来讲,要的朋友可以参考下 C++里函数可以设置缺省参数,Java不可以,只能 ...
- java jit 编译器_浅谈对JIT编译器的理解。
1. 什么是Just In Time编译器? Hot Spot 编译 当 JVM 执行代码时,它并不立即开始编译代码.这主要有两个原因: 首先,如果这段代码本身在将来只会被执行一次,那么从本质上看,编 ...
- python xgboost参数_如何对XGBoost模型进行参数调优
匿名用户 1级 2017-01-19 回答 XGBoost参数调优完全指南(附Python代码) 译注:文内提供的代码和运行结果有一定差异,可以从这里下载完整代码对照参考.另外,我自己跟着教程做的时候 ...
- 发那科2021参数_三菱发那科常用参数对照表
1 螺距 2218 2029=2218/2 1821 2 轴名称 1013 1020 3 第二原点 2038 1421 4 2011 1851 5 2012 1852 6 2013 1851 7 20 ...
- 120xa变频器调试参数_最全的变频器基本参数的调试都在这了,看过的电工都学会了!...
点击技成培训置顶,每日7:30准时为您推送 变频器功能参数很多,一般都有数十甚至上百个参数供用户选择.实际应用中,没必要对每一参数都进行设置和调试,多数只要采用出厂设定值即可.但有些参数由于和实际使用 ...
- synchronized原理_浅谈synchronized的实现原理
Synchronized是Java中的重量级锁,在我刚学Java多线程编程时,我只知道它的实现和monitor有关,但是synchronized和monitor的关系,以及monitor的本质究竟是什 ...
最新文章
- buildroot mysql
- from .filename import class
- LNK1000: Internal error during IncrBuildImage 链接错误解决方法
- 40. 组合总和 II021(回溯法)
- oracle 事务未正常回滚,Spring事务没有回滚异常(Oracle JNDI数据源)
- 王道操作系统考研笔记——2.1.8 调度算法的评价指标
- scoket多线程例子
- matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf
- PSPad 免费文本编辑器推荐
- The 46th ICPC Asia Jinan Regional Contest,2021,46届济南站热身赛
- jdk下没有java源码_openJDK之如何下载各个版本的openJDK源码
- openwrt 遇到问题三 高通9531编译过程
- MD5加密是什么?为什么不可解密?
- 关于一个学习计算机专业,迷茫的大一新生的看法和理解
- w7计算机配置在哪里打开,win7的运行在哪里打开 win7打开运行的方法【图文】
- 用C++编写个人理财软件
- 域格 ASR CAT1 系列 模块驱动安装及升级
- Linux自建steam饥荒服务器教程,【图片】Steam饥荒联机版专用服务器快速搭建教程_饥荒联机吧_百度贴吧...
- 如何选择ROS机器人平台进行SLAM导航入门:SLAM与ROS的关系
- 哪个软件测试手机电池续航好,14部手机电池续航测试:华为P40Pro排名第十小米10Pro倒数第三...