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

个人网站建设策划书手机百度账号登录入口

个人网站建设策划书,手机百度账号登录入口,做影视网站用的封面,广州市设计院官网java中的锁java添加锁的两种方式:synchronized:关键字 修饰代码块,方法 自动获取锁、自动释放锁Reentrantlock:类 只能修饰代码块 手动加锁、释放锁java中锁的名词一些锁的名词指的是锁的特性,设计,状态&am…

java中的锁

java添加锁的两种方式:
synchronized:关键字 修饰代码块,方法 自动获取锁、自动释放锁
Reentrantlock:类 只能修饰代码块 手动加锁、释放锁

java中锁的名词

一些锁的名词指的是锁的特性,设计,状态,并不是都是锁。

乐观锁(实际是没有锁):

认为并发操作,不加锁的方式实现是没有问题的,每次操作前判断(CAS,自旋思想)是否成立,是一种不加锁实现

乐观锁和悲观锁不是指具体的什么类型的锁,可以将其看做一种解决并发同步问题的角度。

悲观锁:

认为并发操作肯定会有问题的,所以必须加锁,是加锁的实现。

总结:乐观锁适合读操作多的场景,悲观锁适合写操作多的场景。

可重入锁:

又名递归锁,是指在同一个线程在外层方法获取锁得时候,可以获取到内部其他同步方法的同步锁。

读、写锁:

ReentrantReadWriteLock

支持读,写加锁;如果都是读操作,加锁,这个读锁可以被多个读操作的线程共享;如果一旦有写操作,加写锁,读写互斥

分段锁:

并非一种实际的锁,是一种思想,将锁的粒度拆分,提高效率;如ConcurrentHashMap

自旋锁:

并非一种实际的锁,是以自旋的方式重新获取锁,自己重试,当线程抢锁失败,就重试几次,成功了就继续,抢不到则线程阻塞

共享锁:

锁可以被多个线程所持有共享,如读写锁中的共享锁;

独占锁:

是互斥锁,同一时间该锁一次只能有一个线程持有,如synchronized;

公平锁:

按照请求锁的顺序获取锁,就是可以根据线程的先来后到公平的获取锁,例如ReentrantLock可以实现公平锁

非公平锁:

没有先来后到,谁抢到谁获得执行权,ReentrantLock也可以实现非公平锁,Synchronized是非公平锁。

Synchronized锁实现

Synchronized锁是依赖底层编译后的指令来控制的,需要我们提供一个同步对象,来记录锁状态。

java中Synchronized通过在对象头设置标记,记录锁状态,多个线程需要是同一个锁对象(在定义线程类时,创建一个static的对象作为锁对象即可),才可以实现加锁控制的目的,达到获取锁和释放锁的目的。

在Synchronized锁的底层实现中,提供锁的状态,用来区别对待,这个锁的状态存储在同步锁对象的对象头中,有一个区域叫Mark Word中存储。这几个状态是根据条件不断攀升的,目的还是优化,如下:

  • 无锁状态

  • 偏向锁状态:一直是一个线程访问, 记录线程的id,快速访问

  • 轻量级锁状态:当锁状态为偏 向锁时,又继续有其他线程来访问,此时升级为轻量级锁;没有获取到锁的线程,不会阻塞,而是继续不断尝试获取锁

  • 重量级锁状态:当锁状态为轻量级锁时,线程自旋达到一定的次数时,进入阻塞状态,锁状态升级为重量级,等待操作系统调度

再次普及一下对象头的概念:

对象的结构
实例对象在内存中的布局分为三个区域:对象头、实例数据、对齐填充。
对象头:对象头中有一块叫Mark Word的区域,用于存储自身的运行时数据,如哈希码(HashCode)、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID。
实例数据:实例数据部分是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。无论是从父类继承下来的,还是在子类中定义的,都需要记录起来。
对齐填充:第三部分对齐填充并不是必然存在的,也没有特别的含义,它仅仅起着占位符的作用。

在介绍其他锁之前,先要认识AQS:

AQS

Abstract Queued Synchronizer 抽象同步队列

位于java.util.concurrent.locks包下,是JUC其他锁实现的基础;

AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出同步器 , 是 JUC 中 核 心 的 组 件 , 比如我 们提到的 ReentrantLock,CountDownLatch 等等都是基于 AQS 来实现。

只要搞懂了 AQS,那么 JUC类中的绝大部分api都可以搞定

AQS思路

在类中维护一个state变量,然后维护一个队列,以及获取锁,释放锁的方法;

当线程创建后,先判断state值,为0,没有线程使用,把state=1,执行完成后,将state=0,期间如果有其他的线程访问,state若等于1,将其他线程放入类中的队列中。(公平的实现)

AQS 的锁模式分为独占和共享

独占锁:每次只能有一个线程持有锁,比如 ReentrantLock 就是以独占方式实现的互斥锁。

共 享 锁 : 允 许 多 个 线 程 同 时 获 取 锁 , 并 发 访 问 共 享 资 源 , 比 如ReentrantReadWriteLock

ReentrantLock锁

无参构造默认是非公平实现,参数为true- 公平实现,false-非公平实现;

ReentrantLock 类内部总共存在 Sync、NonfairSync、FairSync 三个类, NonfairSync 与FairSync 类 继 承 自Sync 类 , Sync 类 继 承自 AbstractQueuedSynchronizer 抽象类。

abstractstaticclassSyncextendsAbstractQueuedSynchronizer

非公平实现(源码)


staticfinalclassNonfairSyncextendsSync {
//加锁
finalvoidlock() { 
//若通过 CAS 设置变量 state 成功,就是获取锁成功,则将当前线程设置为独占线程。 
//若通过 CAS 设置变量 state 失败,就是获取锁失败,则进入 acquire 方法进行后续处理。if (compareAndSetState(0, 1))setExclusiveOwnerThread(Thread.currentThread());elseacquire(1);
}//尝试获取锁,无论是否获得都立即返回protectedfinalbooleantryAcquire(intacquires) {returnnonfairTryAcquire(acquires);}
}

公平实现(源码)

staticfinalclassFairSyncextendsSync { finalvoidlock() { // 以独占模式获取对象,忽略中断 acquire(1);//底层实现交由 AbstractQueuedSynchronizer } }

JUC包中的常用类:

这些都是线程安全的实现类,底层都是基于AQS实现

ConcurrentHashMap

Hashtable:线程安全的,但直接锁住的是整个方法,效率低;
ConcurrentHashMap:是线程安全的实现类,效率是高于Hashtable的;

hashMap和ConcurrentHashMap都不能存储键值为null的元素,比如get方法,返回的是一个null,我们无法确定集合中不存在这个键,还是这个键对应的值是null,就是模糊不清的。

CopyOnWriteArrayList

将读取的操作发挥到机制,读读、读写都不是互斥的,且读的时候不加锁,写的时候加锁。提高读的效率;

实现原理是:在进行add,set等修改操作时,先将数组进行备份,对备份的数组进行修改,完成后,将修改后的数组赋值给原数组,提高了读的效率

CopyOnWriteArraySet

注:去重方式与Set集合是不一样的;

不能存储重复数据,是线程安全的

CountDownLatch辅助类

可以实现让一个线程暂停,等待其他线程各自执行完毕后再自动执行。底层实现也是通过AQS实现的,创建一个CountDownLatch对象后时构造方法中传入一个值,就是state的值,每当一个线程执行完毕,state就-1,直到所有线程都执行完,state等于0时,暂停的线程就可以回复工作了。

http://www.15wanjia.com/news/50510.html

相关文章:

  • 网站建设多少郑州seo课程
  • 网上订餐系统dreamwaver网站设计百度电脑版
  • 做超市商品海报免费海报模版网站pc端网页设计公司
  • 网站不能自行备案吗网站优化培训
  • 上海网站建设 知名做运营和营销的区别和联系
  • 无锡网站制作的公司有哪些昆山优化外包
  • 做网站哪种域名好记快速网站排名优化
  • 郑州疫情最新通报长沙seo
  • 英文网站建设深圳seo优化步骤
  • 我可以复制别人网站代码自己做我的网站吗具软文媒体
  • 如何自建淘宝客网站百度百科推广联系方式
  • 网站开发需要什么人员深圳整站seo
  • 南乐网站建设公司百度下载安装到桌面上
  • 域名免费注册网站怎么做
  • 伤豆丁文库网站开发自己怎么做一个网页
  • 龙游网站制作运营商推广5g技术
  • 中山做外贸网站建设东莞网络公司电话
  • 扬州网站建设小程序百度网站推广价格
  • 我想找个郑州做网站的百度快照怎么使用
  • 做网站联系方式公司网站设计与制作
  • 网页设计和网站开发广州seo推广培训
  • 只做财经的网站电商网站建设 网站定制开发
  • 石家庄做网站 vtkj广东东莞疫情最新消息今天又封了
  • 企业网站改造优化百度竞价推广登陆
  • 应用开发是什么常州seo外包公司
  • 网站底部浮动电话广告平原县网站seo优化排名
  • 公司制作个网站网坛最新排名
  • 学做网站论坛vip美国最新消息今天 新闻
  • 龙岩网站设计招聘信息培训课程开发
  • 网页怎么做成网站营销网站大全