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

迈网科技 官方网站嘉兴市城乡规划建设局网站

迈网科技 官方网站,嘉兴市城乡规划建设局网站,wpf 网站开发,html编程语言一、宏观的说下锁的分类 1#xff09;锁分为乐观锁、悲观锁 悲观锁认为对于同一个数据的并发操作#xff0c;一定是会发生修改的#xff0c;哪怕没有修改#xff0c;也会认为修改。因此对于同一个数据的并发操作#xff0c;悲观锁采取加锁的形式。悲观的认为#xff0c…一、宏观的说下锁的分类 1锁分为乐观锁、悲观锁 悲观锁认为对于同一个数据的并发操作一定是会发生修改的哪怕没有修改也会认为修改。因此对于同一个数据的并发操作悲观锁采取加锁的形式。悲观的认为不加锁的并发操作一定会出问题。 乐观锁则认为对于同一个数据的并发操作是不会发生修改的。在更新数据的时候会采用尝试更新不断重新的方式更新数据。乐观的认为不加锁的并发操作是没有事情的 2锁分为公平锁、非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序有可能后申请的线程比先申请的线程优先获取锁。有可能会造成优先级反转或者饥饿现象。 3锁分为独享锁、共享锁 独享锁是指该锁一次只能被一个线程所持有。 共享锁是指该锁可被多个线程所持有。 二、java中常见具体高并发锁 1synchronized synchronized机制是给共享资源上锁只有拿到锁的线程才可以访问共享资源这样就可以强制使得对共享资源的访问都是顺序的够保证在同一个时刻最多只有一个线程执行同一个对象的同步代码可保证修饰的代码在执行过程中不会被其他线程干扰 synchronized(obj) {} synchronized实现的机理依赖于软件层面上的JVM,对于Synchronized而言也是一种悲观锁、非公平锁、也是独享锁、也是互斥锁。 2ReentrantLock 可重入锁顾名思义这个锁可以被线程多次重复进入进行获取操作Lock实现的机理依赖于特殊的CPU指令比如执行lock()方法的时候cpu发出lock指令比如我们执行unlock的时候cpu发出lock指令可以认为不受JVM的约束并可以通过其他语言平台来完成底层的实现。在并发量较小的多线程应用程序中ReentrantLock与synchronized性能相差无几但在高并发量的条件下synchronized性能会迅速下降几十倍而ReentrantLock的性能却能依然维持一个水准高并发量情况下使用ReentrantLock。 ReentrantLock通过方法lock()与unlock()来进行加锁与解锁操作与synchronized会被JVM自动解锁机制不同ReentrantLock加锁后需要手动进行解锁。为了避免程序出现异常而无法正常解锁的情况使用ReentrantLock必须在finally控制块中进行解锁操作。通常使用方式如下所示 Lock lock new ReentrantLock();try {lock.lock();}finally {lock.unlock();} 对于ReentrantLock而言ReentrantLock在构造函数中提供了是否公平锁的初始化方式默认为非公平锁。这是因为非公平锁实际执行的效率要远远超出公平锁、ReentrantLock也是互斥锁、也是独享锁。 3Semaphore 互斥是进程同步关系的一种特殊情况相当于只存在一个临界资源因此同时最多只能给一个线程提供服务。但是在实际复杂的多线程应用程序中可能存在多个临界资源这时候我们可以借助Semaphore信号量来完成多个临界资源的访问 通过acquire()与release()方法来获得和释放临界资源Semaphore和ReentrantLock用法差不多Semaphore的锁释放操作也由手动进行因此与ReentrantLock一样为避免线程因抛出异常而无法正常释放锁的情况发生释放锁的操作也必须在finally代码块中完成构造方法里面也可以设置否公平锁的初始化方式默认为非公平锁。 4AtomicInteger 在多线程程序中诸如i或i等运算不具有原子性是不安全的线程操作之一。通常我们会使用synchronized将该操作变成一个原子操作但JVM为此类操作特意提供了一些同步类使得使用更方便且使程序运行效率变得更高。通常AtomicInteger的性能是ReentantLock的好几倍。 三、各个锁的优势 1.synchronized 在资源竞争不是很激烈的情况偶尔会有同步的情形下synchronized是很合适的。原因在于编译程序通常会尽可能的进行优化synchronize另外可读性非常好synchronized它是通过悲观锁实现的。 2.ReentrantLock: 在资源竞争不激烈的情形下性能稍微比synchronized差点点。但是当同步非常激烈的时候synchronized的性能一下子能下降好几十倍而ReentrantLock确还能维持常态。 高并发量情况下使用ReentrantLock。 3.Atomic: 和上面的类似不激烈情况下性能比synchronized略逊而激烈的时候也能维持常态。激烈的时候Atomic的性能会优于ReentrantLock一倍左右。但是其有一个缺点就是只能同步一个值一段代码中只能出现一个Atomic的变量多于一个同步无效。因为他不能在多个Atomic之间同步是基于cas操作来实现的它是通过乐观锁来实现的。   参考地址https://youzhixueyuan.com/4-kinds-of-java-thread-locks.html  然后自己再对比比较和精简分析 4 synchronized与Lock的区别 1.首先synchronized是java内置关键字是在在jvm层面Lock是一个接口最后是由CPU来发送lock和unlock指令这个和volatile底层原理实现类似。 2.synchronized无法判断是否获取锁的状态Lock可以判断是否获取到锁 3 ) .synchronized会自动释放锁(a 线程执行完同步代码会释放锁 b 线程执行过程中发生异常会释放锁)Lock需在finally中手工释放锁unlock()方法释放锁否则容易造成线程死锁 4) .用synchronized关键字的两个线程1和线程2如果当前线程1获得锁线程2线程等待。如果线程1阻塞线程2则会一直等待下去而Lock锁就不一定会等待下去如果尝试获取不到锁线程可以不用一直等待就结束了 5) .synchronized的锁可重入、不可中断、非公平而Lock锁可重入、可判断、可公平两者皆可 6) .Lock锁适合大量同步的代码的同步问题synchronized锁适合代码少量的同步问题。
http://www.sadfv.cn/news/140460/

相关文章:

  • 东莞什么行业做网站的多干部重庆网络学院
  • 怎么做考试资料分享网站鞍山做网站团队
  • 用html做的网站步骤外贸自建零售网站做仿牌
  • 新手怎么学做电商win10优化大师好用吗
  • 自助建站免费网站seo专业学校
  • 青海省城乡和住房建设厅网站滨州网站建设sdshiya
  • 建设银行网站注销吗建设一个网站的规划
  • 手机做公司网站wordpress跟php
  • 做抽奖的网站犯法吗中国工程建设工程造价管理协会网站
  • 企业网站模板推荐无锡网站建设的公司
  • 开发网站广州购物网站做兼职
  • angularjs做网站php网站开发是做什么的
  • 建设行政管理部门网站wordpress一步步建企业网站
  • 河南建设河南勘察设计协会网站建设网站50m数据库
  • 深圳网站建设哪家比较专业wordpress安装用户名密码
  • 网络上如何推广网站金寨县住房和城乡建设部网站
  • 网站规划设计是什么域名注册网站有哪些
  • jsp网站开发实例.百度网盘怎么做微商网站
  • 网站设计与建设课程net网站开发的步骤txt
  • app建设网站公司徐州金网网站建设
  • 长沙营销型网站建设费用淘宝电脑版官网首页登录入口
  • 医疗网站建设免费酒店网络营销推广方案
  • 重庆建设集团网站广西南宁市有哪些网络公司
  • 长宁青岛网站建设WordPress免费问答主题
  • 重庆网站推广产品有哪些做图纸的网站
  • 招聘设计师去哪个网站南宁网络推广品牌
  • 柳城企业网站建设公司网站程序代码
  • 北湖区网站建设专业茂名网站制作
  • 营销型网站建设方案营销型网站建设品牌
  • 网站建设与维护试题及答案做网站对服务器要求