当前位置: 首页 > news >正文

做网站需注意什么设计一个网站要多久

做网站需注意什么,设计一个网站要多久,武都区建设局网站,广州网页设计培训教程前言 #x1f31f;#x1f31f;本期讲解关于锁的相关知识了解#xff0c;这里涉及到高频面试题哦~~~ #x1f308;上期博客在这里#xff1a;【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析-CSDN博客 #x1f308;感兴趣的小伙伴看一看小编主页本期讲解关于锁的相关知识了解这里涉及到高频面试题哦~~~ 上期博客在这里【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析-CSDN博客 感兴趣的小伙伴看一看小编主页GGBondlctrl-CSDN博客 目录 ️1.引言 ️2.锁的策略 2.1乐观锁与悲观锁 2.2轻量级锁和重量级锁 2.3自旋锁和挂起等待锁 2.4普通互斥锁和读写锁 2.5公平锁和非公平锁 2.6可重入锁和不可重入锁 ️3.synchronized的加锁过程 3.1锁升级 1.偏向锁阶段 2.轻量级锁 3.重量级锁 3.2锁消除 3.3锁粗化 ️4.CAS的实现原理 4.1CAS的内部逻辑 4.2CAS实现线程安全 4.3CAS的原子性 ️5.总结 ️1.引言 Hellouu们小编又来啦上期在介绍过线程池的理解后相信大家已经对其有了更深的了解致此多线程初阶已经完结前面的博客也可以供大家学习复习哟~~~ 本期只要是讲解关于不同锁的不同的意义理解例如乐观锁和悲观锁以及synchronized的加锁之前的操作.......那就直接开始吧 ️2.锁的策略 2.1乐观锁与悲观锁 这是锁的两种不同实现方式 乐观锁即加锁之前预估在程序中的锁的冲突不大因此在加锁的时候就不会进行太多的操作 悲观锁 即加锁之前预估在程序中的锁的冲突很大因此在加锁的时候就不会进行比较多的操作 乐观锁的影响 由于加锁的工作很少所以加锁的时候就很快但是缺点就是会造成更多的CPU资源的消耗引入一些其他问题 悲观锁的影响由于加锁的时候工作比较多所以在加锁的时候就比较满所以此时造成的问题就很少 2.2轻量级锁和重量级锁 轻量级锁消耗的CPU资源多加锁比较快这里理解为乐观锁 重量级锁消耗的CPU资源少加锁比较慢这里理解为悲观锁 这里的轻量级锁和重量级锁是加锁后对锁的一种评价而乐观锁和悲观锁是加锁前的一种预估这里是从两种不同的角度来描述一件事情 2.3自旋锁和挂起等待锁 自旋锁是轻量级锁的一种典型实现一般搭配while循环在加锁成功后退出循环但是加锁不成功后会进入循环再次尝试加锁 挂起等待锁是重量级锁的一种典型实现在加锁失败后会进入阻塞状态直到获取到锁 自旋锁的使用一般用于锁冲突比较小的情况由于高速反复的尝试加锁导致CPU的资源消耗上升取而代之的是加锁的速度快但是在线程多的情况下会发生“线程饿死”的问题 挂起等待锁的使用一般用于所冲突比较大的情况由于进入阻塞后就是内核随机调度来进行执行要进行的操作增加导致加锁更慢了 synchronized锁这里的synchronized锁具有自适应的能力的例如在锁冲突情况比较严重的时候这里的synchronized就是悲观锁、重量级锁、挂起等待锁.....所以这里的synchronized是根据当时的锁的冲突情况来进行自适应的~~~ 2.4普通互斥锁和读写锁 普通互斥锁即synchronized类似只有加锁和解锁 读写锁这里的解锁是一样的但是在加锁的时候分为两种即“加读锁”与“加写锁” 这里的情况就是 读锁和读锁这之间不会出现锁的冲突 读锁和写锁这之间会出现锁的冲突 写锁和写锁这之间会出现锁的冲突 即一个线程加读锁的时候另一个线程是可以“读”的但是是不可以“写”的 即一个现场加写锁的时候另一个线程是不可以进行“读”和“写”的  为什么要引入读写锁 在线程的读的操作中读这个操作本来就是线程安全的但是使用synchronized任然要给这一部分要加锁由于加锁这个操作本来就是一个低效率的操作在读的过程中不加锁可以打打提升效率 但是读的时候完全不加锁可能会在读的时候进行写操作所以这里又要加“读锁” 2.5公平锁和非公平锁 公平锁即等待加锁的时间越久就应该在锁释放的时候先加上锁先来先到原则 非公平死锁即在锁释放后获取锁的概率是一样的存在竞争 如下图所示 2.6可重入锁和不可重入锁 可重入锁即在加锁过后任然在这个线程继续进行加锁 不可重入锁即在加锁过后这个线程就不能进行加锁了 例如synchronized是一个可重入锁但是在系统中的锁是一个不可重入锁 可重入锁需要记录加锁的对象以及加锁的次数 ️3.synchronized的加锁过程 在synchronized加锁之前会经历一下升级过程 3.1锁升级 1.偏向锁阶段 这里的偏向锁阶段的实现和之前讲解的“懒汉模式”是有一定的联系的即非必要不加锁但是这里的偏向锁并不是真正意义上的加锁 偏向锁即一种非必要不加锁的模式真正意义上是不加锁的而是进行一次轻量级的标记 这里就是当没有锁进行竞争的话就会不加锁只是轻量化标记一下当有锁的竞争那么这个标记的就会很快拿到锁 偏向锁的作用 存在锁冲突的情况下这中锁没有提高效率但是当没有锁的竞争后因为只是轻量化标记而不加锁那么这里的效率就会得到很大的提升 2.轻量级锁 轻量级锁即通过自旋的方式进行实现反复快速的进行加锁的操作 优点在锁的释放后能够快速的拿到并加上锁 缺点非常消耗CPU的资源 这里synchronized会根据有多少个线程在参与竞争如果比较多那么就会升级成重量级锁 3.重量级锁 重量级锁即拿不到锁的线程不会进入自旋状态而是进入阻塞状态释放CPU资源 最后由内核进行随机调度从而加上锁 3.2锁消除 锁消除即synchronized的一种优化策略但是比较保守 即编译器在编译的时候优化一下两种情况 1.不存在锁竞争只有一个线程那么此时就会进行锁消除 2.加锁的代码中没有涉及到成员变量的改动只有局部变量的改动就不需要进行加锁 3.3锁粗化 锁粗化即讲一个细粒度的锁转化为一个粗粒度的锁 粒度即在synchronized{ }这个括号里的代码越少即粒度越细代码越多即粒度越粗 所谓的粒度粗化如下图所示 可以发现这里频繁的加锁解锁会造成额外的时间开销而直接一步到位可以剩下这部分的时间开销 ️4.CAS的实现原理 4.1CAS的内部逻辑 所谓的CAS即compare and swap即一种比较和交换这是一个特殊的CPU的指令 其内部伪代码 boolean CAS(address,expectValue,swapValue){if(addressexpectValue){addressswapValue;return true;}return false } 注意这里是一段伪代码不能进行运行只是描述逻辑的即先进行判断寄存器的值和地址值是否相等相等就将另一个swap寄存器的值给地址值内存地址值 4.2CAS实现线程安全 CAS是CPU的一种指令操作系统又对这个指令进行了封装我们的Java又对操作系统的API进行了封装那么我们就可以进行使用啦 在之前我们在实现两个线程对count实现加法操作需要进行加锁但是有了CAS就可以不用进行加锁了 代码如下 public static AtomicInteger countnew AtomicInteger();public static void main(String[] args) throws InterruptedException {Thread t1new Thread(()-{for (int i 0; i 50000 ; i) {count.getAndIncrement();}});Thread t2new Thread(()-{for (int i 0; i 50000 ; i) {count.getAndIncrement();}});t1.start();t2.start();t1.join();t2.join();System.out.println(最终count的值为count.get());} 这里就是通过使用原子类工具实现了没有加锁的仍然线程安全的代码 注意之前的count是三个指令在线程的随机调度中存在不同指令的穿插的情况导致线程安全问题但是getandincrement本来就是一个线程安全的指令就是一个指令天然就具有原子性 4.3CAS的原子性 在实现原子类的伪代码如下图所示 即起初内存中的值为valueoldvalue是寄存器中的值进入循环当比较成功那么就value的值就为value1了 当存在随机调度的时候 那么此时就会有以下操作 第一步执行右边线程的操作 第二步进行随机调度走的代码 注意在次比较发现内存和寄存器的值是不一样的了此时就会进行再次读取内存在次进行循环比较发现一样了就会加1跳出循环 代价这里的代价就是while循环造成的自旋CPU的消耗 ️5.总结 本期小编讲解了关于不同锁的基本概念包括我们经常使用synchronized的加锁过程包含的“锁升级锁消除锁粗化”的一系列的操作以及CAS的实现和我们之前线程安全的代码的举例本篇主要是涉及到关于锁面试题~~~ ~~~~最后希望与诸君共勉共同进步 以上就是本期内容了 感兴趣的话就关注小编吧。 期待你的关注~~~
http://www.hkea.cn/news/14356212/

相关文章:

  • 重庆网站备案最快几天网站权重不够高 导致
  • 农业网站电子商务平台建设方案高权重网站 内页做跳转给新网站
  • 找图片素材的网站有哪些pc端移动端网站开发
  • 优秀网站建设哪家便宜网站你了解的
  • 做电子商务平台网站网站排名优化技术
  • 广东网站开发wordpress系统设置
  • 沈阳 网站建设怎样把广告放到百度
  • 国税网站页面申报撤销怎么做网站工程专业是什么
  • 重庆网站建设023kw网站域名批量查询注册
  • 建企业网站谷歌外贸网站建站
  • 广州怎么找做网站的公司在线ui设计网站
  • 深圳网站公司制作河南股票配资网站建设
  • 网站前台右侧怎么做二维码网站设计 下拉式菜单怎么做
  • 塑胶托盘东莞网站建设新手学做网站vs
  • 做网站即墨wordpress 4.4.8
  • Centos建网站必须域名制作商城网站
  • 做网站用矢量图还是位图wordpress readium
  • 海珠区建网站wordpress改模板教程视频
  • 网站的费用多少手机上怎么做钓鱼网站
  • 湖南网站优化外包费用网站创建设计SEO优化象客
  • 各网站的风格及特点安徽建站优化哪里有
  • 建设银行网站 开户行怎么查询wordpress 布局调整
  • php搭建网站软件下载汉滨网站建设
  • 哪些网站可以找兼职做室内设计服务公司有哪些
  • 什么网站可以做miR的差异表达图网站制作及管理教程
  • html5手机企业网站模板北京 网站建设咨询顾问公司
  • 美橙互联建站手机端网站推广
  • 网站建设使用什么软件比较好有创意的汽车广告
  • 做网站用的图片怎样压缩自己做小程序要钱吗
  • php素材网站源码免费下载在线制作名片模板