![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础探讨
文章平均质量分 64
CS___001
这个作者很懒,什么都没留下…
展开
-
什么是AQS?AQS的底层实现原理是什么?资源共享方式有哪些?同步工具类有哪些?
AQS 是一个锁框架,它定义了锁的实现机制,并开放出扩展的地方,让子类去实现。比如我们在 lock 的时候,AQS 开放出 state 字段,让子类可以根据 state 字段来决定是否能够获得锁,对于获取不到锁的线程 AQS 会自动进行管理,无需子类关心。原创 2024-04-13 09:09:42 · 254 阅读 · 0 评论 -
Java中常用的线程池有哪些?线程池常用的阻塞队列有哪些?
newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过任务需要,可灵活回收空闲线程。如果线程池长度小于任务需要,可灵活地创建线程。(多少任务多少线程)原创 2024-04-13 09:06:12 · 292 阅读 · 0 评论 -
execute()和submit(),Runnable和Callable,shutdown()和shutdownNow(),isTerminated()和isShutdown(),它们的区别是什么?
execute()方法,没有返回值,接收到Runnable对象就立即开始执行任务。由于没有返回值,所以不知道任务是否完成。submit()方法,返回一个Future对象。如果任务是Runnable类型,那么submit()返回的Future中的结果将是null。Future对象可以用于获取任务执行的结果、取消任务、检查任务是否已完成。(future的get()方法来获取返回值)原创 2024-04-12 09:43:39 · 220 阅读 · 0 评论 -
线程池(ThreadPoolExecutor)是用来做什么的?线程池的七个参数是什么?线程池执行任务的流程是什么?
线程池,是管理一系列线程的资源池,提供了一种管理和限制线程资源的方式。每个线程池还维护一些基本统计信息,例如已完成任务的数量。原创 2024-04-12 09:41:11 · 251 阅读 · 0 评论 -
什么是Threadlocal?它的底层是怎么实现的?Threadlocal是如何导致内存泄漏?
ThreadLocal,即线程本地变量。如果创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝。多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题。 ThreadLocal的应用场景有数据库连接池、会话管理。原创 2024-04-12 09:37:23 · 126 阅读 · 0 评论 -
synchronized和volatile的区别是什么?synchronized和lock的区别是什么?synchronized和ReentrantLock的区别是什么?
volatile本质是在告诉JVM当前变量在线程工作内存中的值是不可靠的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其它线程被阻塞住。synchronized会创建一个内存屏障,内存屏障指令保证了所有CPU操作结果都会直接刷到主存中,从而保证操作的内存可见性。原创 2024-04-07 20:23:23 · 312 阅读 · 0 评论 -
JVM对synchronized的底层做了哪些优化?
锁有四种状态,并且会因实际情况进行膨胀升级,其膨胀方向是:无锁—>偏向锁—>轻量级锁—>重量级锁,并且膨胀方向不可逆。原创 2024-04-07 20:20:35 · 382 阅读 · 0 评论 -
聊一聊volatile关键字的底层原理、synchronized关键字的底层原理
synchronized同步代码块的实现是通过monitorenter和monitorexit指令,其中monitorenter指令指向同步代码块的开始位置,monitorexit指令则指明同步代码块的结束位置。当执行 monitorenter指令时,线程试图获取锁也就是获取monitor的持有权。原创 2024-04-07 20:18:35 · 332 阅读 · 0 评论 -
sleep()方法和wait()方法有什么共同点和区别?Thread类中调用start()方法时,会执行run()方法,那为什么不能直接调用run()方法呢?
sleep()方法,是Thread类的静态方法,当前线程将睡眠n毫秒,线程进入阻塞状态。当睡眠时间到了,会解除阻塞,进入就绪状态,等待分配CPU时间片。睡眠时不释放锁(如果有的话)。wait()方法,是Object的方法,必须与synchronized关键字一起使用,调用后,线程进入阻塞状态,当其它线程调用notify()方法或者notifyAll()方法唤醒它后,当前线程就会解除阻塞状态。睡眠时,会释放互斥锁。但是,只有重新占用互斥锁之后,才会进入就绪状态。原创 2024-04-07 20:14:25 · 171 阅读 · 0 评论 -
聊聊JUC并发编程、线程和进程的区别、Java中创建线程的三种方式
进程是操作系统资源分配的基本单位,而线程是CPU处理器任务调度和执行的基本单位。每个进程都有独立地址空间,包含代码、数据、堆、栈等资源,程序之间的切换会有较大的开销;而线程可以看做轻量级的进程,同一进程的线程共享该进程的地址空间,每个线程也都有自己独立的Java栈、本地方法栈和程序计数器,线程之间切换的开销小。原创 2024-04-06 12:10:03 · 304 阅读 · 0 评论 -
聊聊JVM调优常用的命令、dump文件的作用
分析Dump文件,快速定位内存泄漏;直观地查看各部分内存区域的使用情况,帮助优化内存分配策略和GC设置;查找性能瓶颈,当系统出现性能问题时,帮助了解是否存在由于大量对象导致的频繁GC,或者是大对象过多引发的内存碎片等情况。原创 2024-04-06 12:03:24 · 203 阅读 · 0 评论 -
聊聊什么是双亲委派机制、类加载的过程、常见的类加载器
当一个类加载器收到一个类加载的请求,它首先不会尝试自己去加载,而是将这个请求委派给父类加载器去加载,如果父类加载器还有父类的话,那么就继续往上委派,只有父类加载器在自己的搜索范围类查找不到指定类时,子加载器才会尝试自己去加载该类,子加载器找不到该类,就继续传递给下面的子加载器。原创 2024-04-02 09:00:15 · 177 阅读 · 0 评论 -
聊一聊Java中的垃圾回收算法、垃圾回收器、轻GC、重GC
java中有四种垃圾回收算法,分别是标记清除法、标记压缩法、复制算法、分代收集算法。GC主要作用于堆内存。原创 2024-04-02 08:37:49 · 1254 阅读 · 0 评论 -
聊一聊JVM内存结构、Java内存模型(JMM)、JMM的Happens-before规则、JMM中保证同步的关键字
Java内存模型,也称为JMM,它在底层内存模型的基础上,定义了多线程编程的一组规则,来保证线程间的可见性。这组规则,就是Happens-before规则。原创 2024-03-31 09:44:25 · 716 阅读 · 0 评论 -
Java中常用的集合以及底层的数据结构的拓展问题
ArrayList扩容的本质,就是计算出新的扩容数组的长度,这个长度是原来长度的1.5倍,然后把新数组的实例创建出来,并将原有数组内容复制到新数组中去。原创 2024-03-28 21:12:10 · 862 阅读 · 1 评论 -
Java中常用的集合以及底层的数据结构
一个主要是Collection接口下面Set、List、Queue。另一个是Map接口,主要用来存放键值对。原创 2024-03-27 15:11:59 · 183 阅读 · 1 评论