多线程面试题--使用场景

目录

线程池使用场景

 多线程使用场景一( es数据批量导入)

 多线程使用场景二(数据汇总)

 多线程使用场景三(异步调用)

总结 

如何控制某个方法允许并发访问线程的数量

 总结​编辑

 对ThreadLocal的理解

 实现原理

set方法

 get方法/remove方法

ThreadLocal-内存泄露问题

四种引用类型

 内存泄漏

 总结


多线程面试题--使用场景_第1张图片

线程池使用场景

多线程面试题--使用场景_第2张图片

 在使用的时候,首先会给一个初始值,比如图中是3,然后在其他线程中调用countdown()方法,当count=0则继续执行

多线程面试题--使用场景_第3张图片

 多线程面试题--使用场景_第4张图片

 多线程使用场景一( es数据批量导入)

在我们项目上线之前,我们需要把数据库中的数据一次性的同步到es索引库中,但是当时的数据好像是1000万左右,一次性读取数据肯定不行(oom异常),当时我就想到可以使用线程池的方式导入,利用CountDownLatch来控制,就能避免一次性加载过多,防止内存溢出

多线程面试题--使用场景_第5张图片

  多线程面试题--使用场景_第6张图片

 多线程使用场景二(数据汇总)

 多线程面试题--使用场景_第7张图片

 多线程面试题--使用场景_第8张图片

 多线程使用场景三(异步调用)

多线程面试题--使用场景_第9张图片

总结 

多线程面试题--使用场景_第10张图片

如何控制某个方法允许并发访问线程的数量

多线程面试题--使用场景_第11张图片

多线程面试题--使用场景_第12张图片 

 总结多线程面试题--使用场景_第13张图片

对ThreadLocal的理解

 ThreadLocal是多线程中对于解决线程安全的一个操作类,它会为每个线程都分配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal 同时实现了线程内的资源共享

多线程面试题--使用场景_第14张图片

 

多线程面试题--使用场景_第15张图片

 实现原理

 ThreadLocal本质来说就是一个线程内部存储类,从而让多个线程只操作自己内部的值,从而实现线程数据隔离

多线程面试题--使用场景_第16张图片

set方法

多线程面试题--使用场景_第17张图片

 get方法/remove方法

多线程面试题--使用场景_第18张图片

ThreadLocal-内存泄露问题

四种引用类型

多线程面试题--使用场景_第19张图片

 内存泄漏

多线程面试题--使用场景_第20张图片

 总结

多线程面试题--使用场景_第21张图片

 

你可能感兴趣的:(java,开发语言)