第十期八股文巴拉巴拉说(线程锁篇)

ddd132ed32ca2423abf5170695753d97.png

点击上方蓝字关注我们

 1   Q:什么是自旋锁?

自旋锁是SMP架构中的⼀种low-level的同步机制。

1、当线程A想要获取⼀把自旋锁而该锁又被其它线程锁持有时,线程A会在⼀个循环中自旋以检测锁是不是已经可用了。

2、自旋锁需要注意:由于自旋时不释放CPU,因而持有自旋锁的线程应该尽快释放自旋锁,否则等待该自旋锁的线程会⼀直在那里自旋,这就会浪费CPU时间。持有自旋锁的线程在sleep之前应该释放自旋锁以便其它线程可以获得自旋锁。

3、目前的JVM实现自旋会消耗CPU,如果长时间不调用doNotify方法,doWait方法会⼀直自旋,CPU会消耗太大。

4、自旋锁比较适用于锁使⽤者保持锁时间比较短的情况,这种情况自旋锁的效率比较高。

5、自旋锁是⼀种对多处理器相当有效的机制,而在单处理器非抢占式的系统中基本上没有作用。

1ce5b9483621ff98b7b4415d75a4712b.png

d216749b8f3316c60a8bb045c39578d4.png

 2   Q:什么是CAS?

1、CAS:比较并交换。CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中的一个线程能更新变量的值,而其他线程都失败,失败的线程并不会被挂起,而是被告知在此次竞争中失败,并可以再次尝试。

2、使用CAS在线程冲突严重时,会大幅度降低程序性能,所以CAS只适用于线程冲突较少的情况下使用。

2a9012c20912b547ab50e2ad6ccead5e.png

7696f0b5be7f7399eea61f7a4a280b8e.png

 3   Q:什么是乐观锁和悲观锁?

1、悲观锁:任意读操作,都认为有人在写进行写操作。synchronized关键字通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪个线程持有共享变量的锁,都采用独占的方式访问这些变量。所以独占锁也是一种悲观锁。

2、乐观锁:任意读操作,都认为不太可能有人进行写操作。也就是说乐观锁是假设数据一般情况下不会发生冲突,所以在数据提交的更新的时候,才会正式对数据的冲突与否进行检测。

c938e6b064c8713676c042ef2bed7a30.png

76cb5c831ee00e39ea9cf56173bed90e.png

 4   Q:什么是AQS?

AbstractQueuedSynchronizer简称AQS,是⼀个用于构建锁和同步容器的框架。事实上concurrent包内许多类都是基于AQS构建,例如ReentrantLock,Semaphore,CountDownLatch,ReentrantReadWriteLock,FutureTask等。

7680a964faf49e61a83d3363da023194.png

a26af7313c0a319444cf5a159e11b8e6.png

 5   Q:关于Callable、FutureTask、Future?

1、callable接口使用泛型去定义它的返回类型,用于产生返回结果,而Future用于获取结果。

2、在线程池提交了callable任务后返回一个future对象,使用它可以知道callable的任务状态和返回的执行结果,future提供了get()方法,等待callable任务结束并获取它的结果。

3、FutureTask用于异步获取结果或者取消执行任务的场景,通过Runable或Callable

2c12f305295469946459771498cad9a9.png

79b33c4a060f588a85aab65a97757208.png

 6   Q:如何保证多线程下 i++ 结果正确?

1、事实上i++并非原子性操作,i+1加法,i赋值两步。

2、volatile只能保证你数据的可见性,获取到的是最新的数据,不能保证原子性。

3、用AtomicInteger保证原⼦性。

4、synchronized既能保证共享变量可见性,也可以保证锁内操作的原子性。

7f0ca1c50302a200be79274078b44684.png

304a4547be561902a90665a900ba027b.png

 7   Q:多线程上下文切换是什么意思?

多线程的上下文切换是指 CPU 控制权由一个已经正在运行的线程切换到另外一个就绪并等待获取 CPU 执行权的线程的过程。

6a3dad24a85c92c67e76d38f86fbc90f.png

2ba36ea9fbe08c08339f0b1cd3fe6cfd.png

12cbf3b00b49313ce3c8b0ac99be185d.png

点个在看你最好看

bdba69e434063715f36b95ec73f28492.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值