Java并发

1. 并发基础

多线程的出现是要解决什么问题

Java 如何解决并发问题

线程安全有哪些实现思路

如何理解并发与并行的区别

线程有哪几种状态?分别说明从一种状态到另一种状态转变有哪些方式?

通常线程有哪几种使用方式?

基础线程机制有哪些

线程的中断方式有哪些

线程的互斥同步方式有哪些?如何比较选择

线程之间有哪些协作方式

2. 并发关键字

Synchronized 可以作用在哪里?

Synchronized 本质上通过什么保证线程安全

Synchronized 使得同时只有一个线程可以执行,性能较差,有什么提升的方法

Synchronized 有什么缺陷? Java Lock如何弥补这些缺陷?

Synchronized 和 Lock 的对比选择

Synchronized 的使用注意事项

Synchronized 修饰的方法在抛出异常时,会释放锁码?

多个线程等待同一个Synchronized锁的时候,JVM如何选择下一个获取锁的线程?

Synchronized 是公平锁吗?

volatile 关键字的作用?

volatile 能保证原子性吗?

32位机器上共享的long和double变量为什么要用volatile?

volatile是如何实现可见性的?

volatile是如何实现有序性的?

volatile的应用场景

所有的final修饰的字段都是编译期常量吗?

如何理解private所修饰的方法都是隐式的final?

final类型的类如何扩展

final方法可以被重载吗?

父类的final方法能不能被子类重写?

基本类型的final域重排序规则?

final的原理?

3. JUC全局观

JUC 框架包含几个部分?

Lock框架和Tools有哪些核心类?

JUC并发集合核心类

JUC原子类核心类

JUC线程池核心类

4. 原子类

线程安全的实现方法有哪些?

什么是CAS?

CAS使用实例?结合AtomicInteger给出实例

CAS会有那些问题?

AtomicInteger底层实现?

阐述Unsafe的理解?

对Java原子类的理解?

AtomicStampedReference是如何解决ABA的?

5. JUC锁

为什么LockSupport也是基础核心类?

通过wait/notify 实现同步?

通过LockSupport 的 park/unpark实现同步?

Thread.sleep() Object.wait() Condition.await() LockSupport.park()的区别

如果在wait() 之前执行了notify()会怎么样?

如果在park()之前执行了unpark()会怎么样?

什么是AQS?为什么是核心?

AQS的核心思想是什么?

AQS有哪些核心方法?

AQS定义什么样的资源获取方式?

AQS底层使用了什么样的设计模式?

什么是可重入,什么是可重入锁?用来解决什么问题?

ReentrantLock的核心是AQS,是怎么实现的?

ReentrantLock是如何实现公平锁的?

ReentrantLock是如何实现非公平锁的?

ReentrantLock默认实现的是公平还是非公平锁?

为社么有了ReentrantLock还需要ReentrantReadWriteLock?

ReentrantReadWriteLock底层实现原理?

ReentrantReadWriteLock底层读写状态如何设计?

读锁和写锁的最大数量是多少?

本地线程计数器ThreadLocalHoldCounter是用来做什么的?

写锁的获取和释放如何实现?

读锁的获取和释放如何实现?

锁的升降级?

6. JUC集合类

为什么HashTable慢?它的并发度是什么?ConcurrentHashMap并发度是什么?

ConcurrentHashMap在JDK7和JDK8中实现原理有什么差别?JDK8解决了JDK7中什么问题?

ConcurrentHashMap JDK7 实现原理?

ConcurrentHashMap JDK7 中 Segment数(concurrencyLevel)默认值是多少?为何一旦初始化就不可再扩容?

ConcurrentHashMap JDK7 put机制?如何扩容?

ConcurrentHashMap JDK8 的实现原理?

ConcurrentHashMap JDK8 如何扩容?

ConcurrentHashMap JDK8 链表转红黑树的时机?

ConcurrentHashMap JDK8 如何进行数据迁移?

非并发集合中Fail-Fast机制?

CopyOnWriteArrayList 的实现原理?

弱一致性的迭代器原理?

CopyOnWriteArrarList为什么并发安全且性能比Vector好?

CopyOnWriteArrayList 有何缺陷?应用场景?

要想用线程安全的队列有哪些选择?

ConcurrentLinkedQueue 实现的数据结构?

ConcurrentLinkedQueue 底层原理?

ConcurrentLinkedQueue 的核心方法有哪些?

说说ConcurrentLinkedQueue的HOPS(延迟更新的策略)的设计?

ConcurrentLinkedQueue 适合什么样的使用场景?

什么是BlockingDeque? 适合用在什么样的场景?

BlockingQueue 有哪些?

BlockingQueue 常用方法?

BlockingQueue 实现例子?

BlockingQueue 和BlockingDeque有何关系?对比下它们的方法?

BlockingDeque 有哪些?

BlockingDeque 实现例子?

7. JUC线程池

FutureTask 用来解决什么问题?为什么会出现?

FutureTask 类结构关系?

FutureTask 的线程安全由什么保证?

FutureTask通常会怎么用?

为什么要有线程池?

Java 实现和管理线程池的方式?

ThreadPoolExecutor 的原理?

ThreadPoolExecutor 有哪些核心的参数配置?简要说明?

ThreadPoolExecutor 可以创建哪三种线程池?

当队列满了并且worker的数量达到maxSize的时候,会怎么样?

说说ThreadPoolExector有哪些RejectdExecutionHandler策略?默认是什么策略?

简要说下线程池的任务执行机制?

线程池中任务是如何提交的?

线程池中任务是如何关闭的?

在配置线程池的时需要考虑那些配置因素?

如何监控线程池的状态?

为什么不允许使用Executor创建线程池?

ScheduledThreadPoolExecutor要解决什么问题?

ScheduledThreadPoolExecutor相比ThreadPoolExecutor有那些特性?

ScheduledThreadPoolExecutor有什么样的数据结构?核心内部类和抽象类?

ScheduledThreadPoolExecutor有哪两个关闭策略?区别是什么?

ScheduledThreadPoolExecutor中scheduleAtFixedRate和scheduleWithFixedDelay区别是什么?

为什么ThreadPoolExecutor的调整策略不适用于ScheduledTheadPoolExecutor?

Executor 提供了几种方法来构造ScheduledThreadPoolExecutor?

Fork/Join 主要用来解决什么问题?

Fork/Join 框架在哪个版本引入?

Fork/Join 框架主要包含哪三个模块?模块之间的关系是怎样的?

ForkJoinPool 类继承关系?

FokrJoinTask抽象类继承关系?

整个Fork/Join框架的执行流程/运行机制是怎样的?

具体阐述Fork/Join的分治思想和work-stealing实现方式?

有哪些JDK源码中使用了Fork/Join思想?

如何使用Executors工具类创建ForkJoinPool?

ForkJoin 方式实现 1+2+3+…+100,实现Fob()? 使用时的注意事项?

8. JUC工具类

什么是CountDownLatch?

CountDownLatch 底层实现原理?

CountDownLatch 一次可以唤醒几个任务?

CountDownLatch 有哪些主要方法?

实现一个容器:提供两个方法:add size 写两个线程:线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束?

什么是CyclicBarrier

CountDownLatch和CyclicBarrier对比?

什么是Semaphore?

Semaphore 内部原理?

Semaphore常用方法有哪些?如何实现线程同步和互斥?

单独使用Semaphore不会用到AQS的条件队列?

Semaphore初始化有10个令牌,11个线程同时各调用1次acquire方法,会发生什么?

Semaphore初始化有10个令牌,一个线程重复调用11次acquire方法,会发生什么?

Semaphore初始化有1个令牌,1个线程调用一次acquire方法,然后调用2次release方法,之后另外一个线程调用acquire(2)方法,此线程能够获取到足够的令牌并继续运行吗?

Semaphore初始化有2个令牌,1个线程调用1次release方法,然后一次性获取3个令牌,会获取到吗?

Phaser主要解决什么问题?

Phaser 与 CyclicBarrier CountDownLatch 的区别是什么?

Phaser 运行机制是什么?

给一个Phaser使用的示例?

Exchanger主要解决什么问题?

对比SynchronousQueue,为什么说Exchanger可被视为SynchronousQueue的双向形式?

Exchanger 在不同的JDK版本中实现有什么差别?

Exchanger实现举例?

什么是ThreadLocal?用来解决什么问题?

ThreadLocal的理解?

ThreadLocal如何实现线程隔离?

为什么ThreadLocal会造成内存泄露?如何解决?

ThreadLocal使用场景?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值