![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程
装兔子的猫
这个作者很懒,什么都没留下…
展开
-
【面试题】如果线上机器突然宕机,线程池的阻塞队列中的请求怎么办?
必然导致线程池中积压的任务会丢失本问题主要考察如何解决线程池中任务丢失的问题,要想办法把任务信息入库如果要提交一个任务到线程池里去,在提交之前,可以将当前任务信息插入数据库,更新他的状态:未提交、已提交、已完成。提交成功后,更新他的状态为已提交状态。系统重启,后台线程去扫描数据库里的未提交和已提交状态的任务,可以把任务信息读出来,重提交到线程池里,继续进行执行【评论区】1、因为请求数据都在内存中的,因此宕机就会丢失,但是我们可以记录对应的执行状态,然后针对不同类型的请求,去做幂等或者去重原创 2020-12-07 21:52:06 · 1756 阅读 · 0 评论 -
【面试题】你知道如果线程池的队列满了之后,会发生什么事情吗?
本问题主要考察线程池工作原理有界队列,可以避免内存溢出【corePoolSize】核心线程数设置为10【maximumPoolSize】最大线程数,设置为Integer.MAX_VALUE 21亿【queue】队列设置为有界队列ArrayBlockQueue(200)如果瞬间任务特别多,你可以无限制的不停地创建额外的线程出来,一台机器上可能有很多很多很多线程,每个线程都有自己的栈内存,占用一定的内存资源,会导致内存资源耗尽,系统也会崩溃。即使内存没有崩溃,也会导致机器的cpu loa原创 2020-12-07 21:50:24 · 3304 阅读 · 0 评论 -
【面试题】如果在线程中使用无界阻塞队列会发生什么问题?
另外一种问法:在远程服务异常的情况下,使用无界阻塞队列,是否会导致内存飙升?调用超时,导致队列中任务积压,队列越来越大,必然会导致内存飙升,还会导致内存溢出OOM本问题主要考察线程池工作原理...原创 2020-12-07 21:48:27 · 536 阅读 · 0 评论 -
【面试题】那你再说说线程池的核心配置参数都是干什么的?平时我们应该怎么用?
ThreadPoolExecutor(int corePoolSize, // 1 int maximumPoolSize, // 2 long keepAliveTime, // 3 TimeUnit unit, // 4 BlockingQueue<Runnable> workQueue, // 5 ThreadFactory.原创 2020-12-07 21:45:53 · 418 阅读 · 0 评论 -
【面试题】说说线程池的底层工作原理可以吗?
系统不可能无限创建很多的线程,会构建一个线程池,有一定数量的线程,让他们执行各种各样的任务,线程执行完任务之后,不会销毁自己,继续等待执行下一个任务。频繁的创建线程、销毁线程,会导致开销浪费ExecutorService threadPool = Executors.newFixedThreadPool(10);//10表示核心线程池数,corePoolSizethreadPool.submit(new Callable(){ public void run(){原创 2020-12-07 21:43:12 · 265 阅读 · 0 评论 -
【面试题】你对JDK中的AQS理解吗?AQS的实现原理是什么?
ReentrantLockstate变量----》CAS----》失败后进入等待队列----》释放锁后唤醒默认非公平锁,公平锁需将fair设置为truesynchronized和ReentrantLock的区别 synchronized ReentrantLock 系统自动加锁 手动加锁 synchronized CAS 无 可tryL原创 2020-12-06 13:52:11 · 399 阅读 · 0 评论 -
【面试题】ConcurrentHashMap实现线程安全的底层原理到底是什么?
JDK1.7以及之前的版本,多个数组,分段加锁,一个数组一个锁JDK1.8及以后的版本,优化细粒度,整合为一个数组,对数组中每个元素进行CAS,如果CAS失败了说明当前有人了,此时synchronized对数组元素加锁,使用链表+红黑树进行处理,对数组每个元素加锁。目前较多情况下,多线程要同时读写一个HashMap原始用法HashMap map = new HashMap();synchronized(map){ map.put("xxxx","yyyy");}如果线程原创 2020-12-06 13:47:44 · 453 阅读 · 1 评论 -
【面试题】能聊聊你对CAS的理解以及其底层实现原理可以吗?
当多个线程要访问同一个数据时,包括取值、询问、修改时,必然会出现多线程并发安全问题public class MyObject{ int i = 0; public synchronized void increment(){ //同一时间,只有一个线程可以进入当前方法 //在一个对象实例的方法上加synchronized i++; }}调用:MyObject mo = new MyObject();mo.increm原创 2020-12-06 13:44:26 · 906 阅读 · 0 评论 -
【面试题】说说synchronized关键字的底层原理是什么?
synchronized:内存屏障、CPU硬件级别的原理,原子性、可见性、有序性、指令重排、偏向锁等等用法: 可以对对象加锁,也可以对类加锁synchronized(myObject){ //一堆代码 synchronized(myObject){ //一堆代码 }}synchronized(otherObject.class){ //一堆代码}synchronized该关键字在编译成class文件后可以看到对应的语句是mo...原创 2020-12-06 13:39:56 · 1465 阅读 · 0 评论 -
【面试题】两个线程交替打印1A2B3C....26Z(多种方法实现)
1.LockSupportpackage com.example.demo;import java.util.concurrent.locks.LockSupport;/** * 交替打印1A2B3C......26Z */public class Thread_LockSupport extends Thread { static Thread t1 = null, ...原创 2020-03-10 19:59:00 · 3142 阅读 · 3 评论