记录面试线程

ThreadLocal:ThreadLocal面试六连问,这个链接已经很好体现了面试,但是有一点我需要补充,ThreadLocal hashcode冲突时,是采用线性探测的方式进行下一步操作。

线程池:运行原理,参数含义,拒绝策略等,或许还有很多深度问题,但是我只遇到了这些。

aqs:1.什么是AQS?

答:AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,比如ReentrantLock,Semaphore,SynchronousQueue,FutureTask等等皆是基于AQS的。

2.AQS的核心思想是什么?它是怎么实现的?

答:AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。AQS使用一个voliate int成员变量来表示同步状态,通过内置的FIFO队列来完成获取资源线程的排队工作。AQS使用CAS对该同步状态进行原子操作实现对其值的修改。

AQS定义了两种资源获取方式:独占(只有一个线程能访问执行,又根据是否按队列的顺序分为公平锁和非公平锁,如ReentrantLock) 和共享(多个线程可同时访问执行,如Semaphore/CountDownLatch,Semaphore、CountDownLatCh、 CyclicBarrier )。ReentrantReadWriteLock 可以看成是组合式,允许多个线程同时对某一资源进行读。

AQS底层使用了模板方法模式, 自定义同步器在实现时只需要实现共享资源 state 的获取与释放方式即可,至于具体线程等待队列的维护(如获取资源失败入队/唤醒出队等),AQS已经在上层已经帮我们实现好了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 下面最近发的一些并发编程的文章汇总,通过阅读这些文章大家再看大厂面试中的并发编程问题就没有那么头疼了。今天给大家总...
    架构师springboot阅读 4,023评论 0 3
  • 除了内置锁synchronized以外,还有ReentrantLock和ReentrantReadWriteLoc...
    alivs阅读 3,690评论 0 0
  • 前言 这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。 这些多线程的问题,有些来源于各大网站...
    java成功之路阅读 4,221评论 0 9
  • 生活因为记录才会有发生,原本喜欢热闹的我,现在更喜欢每天安静的和自己的独处,读书,思考,这样的时刻,总是温馨的,不...
    lily爱生活阅读 2,767评论 0 0
  • 班主任的工作真是千头万绪,每天有太多的任务需要我们处理,上面布置的任务,学校的任务,还有自己真正想做自己喜...
    鞍山晓军阅读 4,459评论 0 3

友情链接更多精彩内容