-)6、@)6、!)6有什么区别?(高薪常问)
-)6:-C)6同步阻塞式 )6,就是我们平常使用的传统 )6,它的特点是模式简
单使用方便,并发处理能力低。
@)6:@:)6同步非阻塞 )6,是传统 )6的升级,客户端和服务器端通过
4"(通道)通讯,实现了多路复用。
!)6:!5" )6是 @)6的升级,也叫 @)6,实现了异步非堵塞 )6,
异步 )6的操作基于事件和回调机制。
#H"/ 的原理(高薪常问)
H"/9:为共享变量在每个线程中创建一个副本,每个线程都可以访问自
己内部的副本变量。通过 "/ 保证线程的安全性。
其实在 H"/9 类中有一个静态内部类 H"/9*其类似于 +,
用键值对的形式存储每一个线程的变量副本,H"/9 中元素的 C5 为当前
H"/9 对象,而 对应线程的变量副本。
H"/9本身并不存储值,它只是作为一个 C5 保存到 H"/9
中,但是这里要注意的是它作为一个 C5 用的是弱引用,因为没有强引用链,弱引用在
J4 的时候可能会被回收。这样就会在 H"/9 中存在一些 C5 为 的键值
对(5)。因为 C5 变成 了,我们是没法访问这些 5 的,但是这些 5 本
身是不会被清除的。如果没有手动删除对应 C5 就会导致这块内存即不会回收也无法访问,
也就是内存泄漏。
使用完 H"/9 之后,记得调用 方法。 在不使用线程池的前提下,
即使不调用 方法,线程的B变量副本B也会被 ( 回收,即不会造成内存泄漏的情
况。
,同步锁、死锁、乐观锁、悲观锁 (高薪常问)
同步锁:
当多个线程同时访问同一个数据时,很容易出现问题。为了避免这种情况出现,我们
要保证线程同步互斥,就是指并发执行的多个线程,在同一时间内只允许一个线程访问共
享数据。中可以使用 5"?/关键字来取得一个对象的同步锁。
死锁:
何为死锁,就是多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释
放。
乐观锁:
总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但