Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

Java线程锁 PDF 下载


分享到:
时间:2020-09-26 09:08来源:http://www.java1234.com 作者:小锋  侵权举报
Java线程锁 PDF 下载
失效链接处理
Java线程锁 PDF 下载


本站整理下载:
 
相关截图:
 
主要内容:

题⽬描述
4中常⽤Java线程锁的特点,性能⽐较及使⽤场景
1. ⾯试题分析
根据题⽬要求我们可以知道:
多线程的缘由
多线程并发⾯临的问题
4种Java线程锁(线程同步)
Java线程锁总结
分析需要全⾯并且有深度
容易被忽略的坑
分析⽚⾯
没有深⼊
2. 多线程的缘由
在出现了进程之后,操作系统的性能得到了⼤⼤的提升。虽然进程的出现解决了操作系统的并发问题,
但是⼈们仍然不满⾜,⼈们逐渐对实时性有了要求。
使⽤多线程的理由之⼀是和进程相⽐,它是⼀种⾮常花销⼩,切换快,更”节俭”的多任务操作⽅式。
在Linux系统下,启动⼀个新的进程必须分配给它独⽴的地址空间,建⽴众多的数据表来维护它的代码
段、堆栈段和数据段,这是⼀种”昂贵”的多任务⼯作⽅式。⽽在进程中的同时运⾏多个线程,它们彼此
之间使⽤相同的地址空间,共享⼤部分数据,启动⼀个线程所花费的空间远远⼩于启动⼀个进程所花费
的空间,⽽且,线程间彼此切换所需的时间也远远⼩于进程间切换所需要的时间。
3. 多线程并发⾯临的问题
由于多个线程是共同占有所属进程的资源和地址空间的,那么就会存在⼀个问题:
如果多个线程要同时访问某个资源,怎么处理?
在Java并发编程中,经常遇到多个线程访问同⼀个 共享资源 ,这时候作为开发者必须考虑如何维护数据
⼀致性,这就是Java锁机制(同步问题)的来源。
Java提供了多种多线程锁机制的实现⽅式,常⻅的有:
1. synchronized
2. ReentrantLock
3. Semaphore
4. AtomicInteger等
每种机制都有优缺点与各⾃的适⽤场景,必须熟练掌握他们的特点才能在Java多线程应⽤开发时得⼼应
⼿。
4. 4种Java线程锁(线程同步)
1.synchronized
在Java中synchronized关键字被常⽤于维护数据⼀致性。
synchronized机制是给共享资源上锁,只有拿到锁的线程才可以访问共享资源,这样就可以强制使得对
共享资源的访问都是顺序的。
Java开发⼈员都认识synchronized,使⽤它来实现多线程的同步操作是⾮常简单的,只要在需要同步的
对⽅的⽅法、类或代码块中加⼊该关键字,它能够保证在同⼀个时刻最多只有⼀个线程执⾏同⼀个对象
的同步代码,可保证修饰的代码在执⾏过程中不会被其他线程⼲扰。使⽤synchronized修饰的代码具有
原⼦性和可⻅性,在需要进程同步的程序中使⽤的频率⾮常⾼,可以满⾜⼀般的进程同步要求。
synchronized (obj) {
//⽅法
…….
}
synchronized实现的机理依赖于软件层⾯上的JVM,因此其性能会随着Java版本的不断升级⽽提⾼。
到了Java1.6,synchronized进⾏了很多的优化,有适应⾃旋、锁消除、锁粗化、轻量级锁及偏向锁等,
效率有了本质上的提⾼。在之后推出的Java1.7与1.8中,均对该关键字的实现机理做了优化。
需要说明的是,当线程通过synchronized等待锁时是不能被Thread.interrupt()中断的,因此程序设计时
必须检查确保合理,否则可能会造成线程死锁的尴尬境地。
最后,尽管Java实现的锁机制有很多种,并且有些锁机制性能也⽐synchronized⾼,但还是强烈推荐在
多线程应⽤程序中使⽤该关键字,因为实现⽅便,后续⼯作由JVM来完成,可靠性⾼。只有在确定锁机
制是当前多线程程序的性能瓶颈时,才考虑使⽤其他机制,如ReentrantLock等。
2.ReentrantLock
可重⼊锁,顾名思义,这个锁可以被线程多次重复进⼊进⾏获取操作。
ReentantLock继承接⼝Lock并实现了接⼝中定义的⽅法,除了能完成synchronized所能完成的所有⼯作
外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的⽅法。
Lock实现的机理依赖于特殊的CPU指定,可以认为不受JVM的约束,并可以通过其他语⾔平台来完成底
层的实现。在并发量较⼩的多线程应⽤程序中,ReentrantLock与synchronized性能相差⽆⼏,但在⾼
并发量的条件下,synchronized性能会迅速下降⼏⼗倍,⽽ReentrantLock的性能却能依然维持⼀个⽔
准。
因此我们建议在⾼并发量情况下使⽤ReentrantLock。
ReentrantLock引⼊两个概念:公平锁与⾮公平锁。
公平锁指的是锁的分配机制是公平的,通常先对锁提出获取请求的线程会先被分配到锁。反之,JVM按
随机、就近原则分配锁的机制则称为不公平锁。

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐