JAVA程序猿3000问第3日

JAVA程序猿3000问第3日

第十一问 sleep()和wait()方法与对象锁、锁池、等待池
第十二问 线程池参数
第十三问 HashMap是如何解决hash冲突的
第十四问 CurrentHashMap是如何解决线程安全问题的
第十五问 简单介绍一下CGLib

第十一问 wait(),notify()方法与对象锁、锁池、等待池

假设某方法被synchronized关键字修饰,已经有一个线程获取到了对象的锁正在执行该方法,那么其他线程想要调用该方法就会进入锁池阻塞等待。

如果线程在拥有锁的时候调用的await()方法,线程将会释放锁进入等待池,这个时候由于锁已被释放,锁池中等待的线程就会竞争锁继续执行。

notify()方法就是将等待池中的线程,唤醒一个进入锁池参与锁竞争。notifyAll()就是将等待池中所有线程唤醒,进入锁池。

ps:据说notify唤醒这个情况在java底层实际上是不会进入锁池(入口区),而是直接参与锁竞争,但是我觉得在逻辑上这么划分是没有问题的。

第十二问 线程池参数

  • corePoolSize,线程池里最小线程数

  • maximumPoolSize,线程池里最大线程数量,超过最大线程时候会使用RejectedExecutionHandler

  • keepAliveTime,unit,线程最大的存活时间

  • workerQueue,缓存异步任务的队列

  • threadFactory,用来构造线程池里的worker线程

  • RejectedExecutionHandler:队列已满,而且任务量大于最大线程的异常处理策略。有以下取值
    ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
    ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
    ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
    ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

    这种题可以说是java程序猿面试必问问题了,但是如果平常不经常用到的话(事实上确实也用到的少),突然被问到真的很容易记错参数含义,当初网易转正面试的时候我这个就答错了( ̄. ̄)

第十三问 HashMap是如何解决hash冲突的

链地址法

HashMap的数据结构是:数组Node[]与链表Node中有next Node.
在put元素时,先根据key的hashCode重新计算出hash值,然后再根据hash值找出这个元素在数组中的位置,如果数组的此处已经存放了数据,那么这个元素会议链表的形式保存,新的在链头,旧的在链尾;如果数组的此处没有存放数据,则直接将该元素保存在数组的此位置上。

第十四问 CurrentHashMap是如何解决线程安全问题的

1.7是ReentrantLock+Segment+HashEntry实现分段锁。
1.8的实现已经抛弃了Segment分段锁机制,利用CAS+Synchronized来保证并发更新的安全,底层采用数组+链表+红黑树的存储结构。数据结构上来说和1.8的hashMap长得差不多,只不过多了同步操作控制并发。

第十五问 简单介绍一下CGLib

CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。
cglib就是封装了asm,简化了asm的操作,实现了在运行期动态生成新的class。
CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。

  • 应用:CGlib为spring aop提供了底层的一种实现;为hibernate使用cglib动态生成VO/PO (接口层对象)。
  • CGLIB原理:动态生成一个要代理类的子类,子类重写要代理的类的所有不是final的方法。在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。它比使用java反射的JDK动态代理要快。
  • CGLIB底层:使用字节码处理框架ASM,来转换字节码并生成新的类。不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。
  • CGLIB缺点:对于final方法,无法进行代理。

ps:昨日断更一天,原因是家里门锁坏了,浪费了点时间,然后又吸了会gakki

参考

https://blog.csdn.net/weixin_39393610/article/details/81180539

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×