首页 > 其他分享 >synchronized内置锁和volatile关键字

synchronized内置锁和volatile关键字

时间:2024-06-15 16:32:26浏览次数:23  
标签:内置 synchronized 对象 ThreadLocal 类锁 线程 volatile

synchronized内置锁
对象锁和类锁:
对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的 class 对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个 class 对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。

但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存在的,类锁其实锁的是每个类的对应的 class 对象。类锁和对象锁之间也是互不干扰的。

ThreadLocal 与 Synchonized 的比较
ThreadLocal 和 Synchonized 都用于解决多线程并发訪问。可是 ThreadLocal与 synchronized 有本质的差别。
synchronized 是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。
而 ThreadLocal 为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。

也就是说threadlocal体现的是线程间的 隔离思想,而sychronized体现的是线程的阻塞思想。

volatile
最轻量的同步机制
volatile 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某
个变量的值,这新值对其他线程来说是立即可见的

标签:内置,synchronized,对象,ThreadLocal,类锁,线程,volatile
From: https://www.cnblogs.com/velloLei/p/18249435

相关文章

  • 传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解
    内置数据源我们回顾一下druid数据源的配置方式通过type属性指定数据源的类型导入依赖starter就使用了spring的自动装配功能格式二是在引入druid的依赖的基础上进行的一种配置方式Tomcat内部也可以进行数据源的配置轻量级中最快的数据源对象我们切换德鲁伊连接池......
  • JavaScript内置API
    js的内置api:js语言本身提供的一组预定义的对象、方法和属性,开发者可以直接使用它们来实现各种功能优点:1.提高开发效率2.增加代码可读性和可维护性3.跨平台兼容4.性能优化5.社区支持6.标准化和规范化1.DOMAPI提供了操作网页HTML元素的方法和属性<divid="myEl......
  • Python期末系统梳理(二):内置数据结构
    几种数据结构的比较列表:由一系列按特定顺序排列的元素组成,使用方括号[]表示,逗号分割其中的元素,==可修改元组:理解为不可修改的列表即可,使用圆括号()表示集合:无序且不重复的元素序列,使用大括号{}表示字典:一系列键值对,每个键和一个值关联,可使用键访问值,无序再梳理·列表有......
  • Python中常用的几个内置方法(max()/min()、filter()、map()、sorted、reduce())
    1.max()/min()传入一个参数(可迭代对象),返回这个可迭代对象中最大的元素可以设置default关键字参数,当这个可迭代对象为空时,返回default的值传入多个参数,返回这些参数中最大的参数多个参数必须是同类型的两种方法都可以设置key关键字参数(传入函数)"""max(it......
  • synchronized详解
    Java锁与线程的那些事分析了Java锁的一些底层原理,该博文底部的四篇参考文章也挺有意思,有时间可以看一下synchronized使用方法与注意事项使用方法对象锁类锁具体的使用方法太过于基础,不再在这里赘述了。注意事项在应用synchronized的时候,有一些细节需要注意:被锁住的......
  • JUC并发编程第十一章——Synchronized与锁升级机制
    1入门知识介绍synchronized锁,是不是默认实现了锁升级。代码中只需要直接使用synchronized,至于怎么从偏向锁升级为轻量锁再升级为重量级锁,这些底层jvm已经实现了。不需要程序员担心。是的,Java8中的synchronized关键字确实默认实现了锁升级的机制。当使用synchronized关键......
  • 基本数据类型 String,null 和 undefined,运算符,流程控制,JavaScript之数组,数组常用
    Ⅰ基本数据类型String【一】String类型String类型就是字符串类型【二】定义变量【1】常规变量var变量名="变量值";//一般用这种var变量名='变量值';不支持三引号【2】可以先声明不赋值先用varb;再对变量b赋值varb='6';【三】字符串的格式化输出语法......
  • SpringBoot内置数据源
    回顾:在我们之前学习在配置文件当中配置对应的数据源的时候,我们设置的数据源其实都是Druid的数据源,并且其配置有两种方式,当然这两种方式都需要我们导入对应的有关德鲁伊的依赖才行一种是直接在开始设置为druid数据源类型的一种是在对应的正常的数据库配置下,设置......
  • 【JavaScript】内置对象 - 字符串对象 ⑦ ( String 字符串替换 | replace 函数 | repl
    文章目录一、String字符串替换1、replace函数替换字符串2、使用replace函数替换所有匹配字符串3、replaceAll函数替换字符串二、String字符串转数组1、split函数切割字符串2、代码示例-切割字符串String字符串对象参考文档:https://developer.mozilla.......
  • 写一个多线程控制工人接活和工作的例子(使用synchronized wait notifyAll)
    packageorg.example;publicclassStudyWaitAndNotify{publicstaticvoidmain(String[]args){WorkManNeedToDoa=newWorkMan();Leaderl1=newLeader(a,25);Leaderl2=newLeader(a,20);Testert1=newTester(a......