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

加强网站建设技术培训阿里巴巴网站建设改图片

加强网站建设技术培训,阿里巴巴网站建设改图片,网站建设利益,建设网站网站设计1 synchronized 和 lock的区别 synchronized是一个关键字, lock是一个接口,实际使用的是实现类 synchronized通过触发的是系统级别的锁机制, lock是API级别的锁机制 synchronized自动获得锁,自动释放锁。 lock需要通过方法获得锁…

1 synchronized 和 lock的区别

  1. synchronized是一个关键字, lock是一个接口,实际使用的是实现类

  2. synchronized通过触发的是系统级别的锁机制, lock是API级别的锁机制

    synchronized自动获得锁,自动释放锁。 lock需要通过方法获得锁并释放锁

  3. synchronized可以修饰代码段和方法,lock只能修饰代码中

  4. synchronized无法判断是否获得锁,lock可以通过tryLock判断

  5. synchronized一旦阻塞无法中断,lock可以被中断 lock.lockInterruptibly();等待并可以被中断

  6. synchronized一旦出现死锁无法自动解决,lock出现死锁后自动解除

  7. synchronized锁的形式单一, lock锁的形式多样化(可重入锁,排他锁,共享锁,读写锁,公平锁,非公平锁)

  8. synchronized早先属于重量级锁,性能较低。 lock相比之下性能略高

main(){A a = new A();//问题是:在线程1调用t1方法,睡眠的10秒中,线程2和线程3和线程4能否执行?new Thread(()->{a.t1()});new Thread(()->{a.t2()});new Thread(()->{a.t3()});new Thread(()->{a.t4()});new Thread(()->{a.t5()});
}class A{public synchronized void t1(){ //睡眠了10s中 }public synchronized void t2(){}public void t3(){}public synchronized static void t4(){} //静态方法,属于类(模板对象 Class)public void t5(){synchronized(this.getClass()){}}    
}

2 synchronized详解

2.1 用户态与内核态

  • 可以理解成是两种对系统元件不同的访问权限

  • 程序运行时,会用到很多系统的元件。

  • 不是所有的元件,所有的程序都具有使用权限

  • 有些元件普通程序(Java程序)就可以直接访问,此时我们就说程序处于用户态

  • 有些元件普通不能直接访问,需要通过系统帮助访问(CPU, IO等),此时我们就说程序处于内核态

  • 我们的在运行的过程中,随着需要使用的系统元件不同,有可能会从用户态切换到内核态

  • 用户态与内核态的切换需要耗时,耗资源。

2.2 用户线程 与 内核线程

  • 系统有自己的线程,称为内核线程

  • 我们使用Java语言创建的线程(Thread),称为用户线程

  • 内核线程的数量与系统的cpu数量(逻辑处理器数量)是相同

  • 用户线程在执行过程中,不是直接抢占CPU,而是要争抢与内核线程的关联(映射)

  • 如果创建的用户线程过多, 多个用户线程会映射到一个内核线程上

  • 但一个内核线程每次(一个时间片)只能为一个用户线程执行任务

  • 所以当内核线程在多个用户线程之间切换时,需要保留上一个线程执行的相关信息

  • 我们称这个过程为上下文切换

  • 上下文切换耗时,耗资源

2.3 synchronized重量级锁

  • synchronized在上锁时,最终使用的是系统级别的mutex互斥锁(排他锁)

  • 使用synchronized上锁时,会存在用户态与内核态的切换,性能较低。

  • 我们称这种会涉及到系统资源使用的锁,为重量级锁。

  • jdk1.5 推出JUC之后, lock锁在一定程度上,减缓了重量级的性能消耗

  • lock锁在整个锁应用过程中,有一部分是在用户态完成的,少量在内核态完成。

  • 所以lock在整体性能上要优于synchronized锁。

2.4 synchronized锁升级

  • 早先版本(1.6-) , synchronized属于重量级锁,因为他直接使用系统级别的互斥锁

  • 所以1.5版本的juc中,lock对于synchronized有所优化

  • 1.6 直接对synchronized做了优化 , 提供了锁升级的机制

  • 升级过程

  • 注意:无论锁怎么样升级降级,对我们的编码没有影响。

  • 可以利用JOL工具 和 对对象头结构的理解来测试锁升级的过程

  • 创建对象时,在jvm堆内存中会开辟存储空间。这个对象空间也有一定的结构

    • 部分一: 对象头

      1. mark word 标记内容 ,其中包括锁标记,随着锁升级,锁标记也会变化

      2. Klass 指向类模板

    • 部分二: 属性数据空间

    • 部分三: 数据对齐

    • 扩展:如果是数组对象,还有部分四,length属性

http://www.yayakq.cn/news/560511/

相关文章:

  • 公司网站的建设怎么做外贸网站域名用境内还是境外
  • 玉林建设银行网站如何设计购物网站
  • 网站建设类电话销售贵阳建立网站
  • 自建淘宝客APP网站模板网站开发页面适应高度
  • 动易网站地图开网店的流程和步骤及费用
  • 用mockplus做网站原型wordpress download_link
  • 合肥市城乡建设局2019网站大学html网站建设作业
  • 深圳住房和建设局新网站ps做网站时画布宽度
  • wap网站和app的区别互联网推广方式
  • 成品网站app开发重庆百度推广开户
  • 做单页网站需要做什么的百度网页入口
  • 网站建设的步骤过程盘锦做网站价格
  • 做网站卖假名牌违法吗网投网站如何建设
  • 嘉兴市南湖区城乡规划建设局网站高端网站建设系统规划
  • 深圳网站运营外包公司平台推广是什么
  • 鸿邑科技 网站建设网站外链建设实例
  • 有哪些网站可以做全屏代码电脑网站生成手机网站
  • 方案图网站第三方做农产品价格数据的网站
  • 网站主要栏目洛阳 网站建设
  • 个人网站吗建设工程合同性质上属于实践合同
  • wordpress5.2.2济南seo外包公司
  • 做瞹瞹网站怎样用apache做网站
  • 网站改版准备上海中高风险地区有哪些
  • 如何注册域名网站wordpress输入命令
  • 飞扬世纪网站建设怎么给网站做开场动画
  • 个人做网站能赚钱吗福田公司简介
  • 设建网站郑州优秀网站建设公司
  • 江西网站设计哪家强汕头食品骏域网站建设
  • 虚拟邮箱注册网站2345浏览器
  • 新乡网站建设服务哪家好简单网站建设优化