草庐IT

硬核剖析ThreadLocal源码,面试官看了直呼内行

工作面试中经常遇到ThreadLocal,但是很多同学并不了解ThreadLocal实现原理,到底为什么会发生内存泄漏也是一知半解?今天一灯带你深入剖析ThreadLocal源码,总结ThreadLocal使用规范,解析ThreadLocal高频面试题。1.ThreadLocal是什么ThreadLocal是线程本地变量,就是线程的私有变量,不同线程之间相互隔离,无法共享,相当于每个线程拷贝了一份变量的副本。目的就是在多线程环境中,无需加锁,也能保证数据的安全性。2.ThreadLocal的使用/***@author一灯架构*@apiNoteThreadLocal示例**/publicclas

硬核剖析ThreadLocal源码,面试官看了直呼内行

工作面试中经常遇到ThreadLocal,但是很多同学并不了解ThreadLocal实现原理,到底为什么会发生内存泄漏也是一知半解?今天一灯带你深入剖析ThreadLocal源码,总结ThreadLocal使用规范,解析ThreadLocal高频面试题。1.ThreadLocal是什么ThreadLocal是线程本地变量,就是线程的私有变量,不同线程之间相互隔离,无法共享,相当于每个线程拷贝了一份变量的副本。目的就是在多线程环境中,无需加锁,也能保证数据的安全性。2.ThreadLocal的使用/***@author一灯架构*@apiNoteThreadLocal示例**/publicclas

还不懂Java线程池实现原理,看这一篇文章就够了

线程池无论是工作还是面试都是必备的技能,但是很多人对于线程池的实现原理却一知半解,并不了解线程池内部的工作原理,今天一灯就带大家一块剖析线程池底层实现原理。1.为什么要使用线程池使用线程池通常由以下两个原因:频繁创建销毁线程需要消耗系统资源,使用线程池可以复用线程。使用线程池可以更容易管理线程,线程池可以动态管理线程个数、具有阻塞队列、定时周期执行任务、环境隔离等。2.线程池的使用/***@author一灯架构*@apiNote线程池示例**/publicclassThreadPoolDemo{publicstaticvoidmain(String[]args){//1.创建线程池Thread

还不懂Java线程池实现原理,看这一篇文章就够了

线程池无论是工作还是面试都是必备的技能,但是很多人对于线程池的实现原理却一知半解,并不了解线程池内部的工作原理,今天一灯就带大家一块剖析线程池底层实现原理。1.为什么要使用线程池使用线程池通常由以下两个原因:频繁创建销毁线程需要消耗系统资源,使用线程池可以复用线程。使用线程池可以更容易管理线程,线程池可以动态管理线程个数、具有阻塞队列、定时周期执行任务、环境隔离等。2.线程池的使用/***@author一灯架构*@apiNote线程池示例**/publicclassThreadPoolDemo{publicstaticvoidmain(String[]args){//1.创建线程池Thread

面试官不按套路,竟然问我Java线程池是怎么统计线程空闲时间?

背景介绍:你刚从学校毕业后,到新公司实习,试用期又被毕业,然后你又不得不出来面试,好在面试的时候碰到个美女面试官!面试官:小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线程的?这面试官是不是想坑我?是不是摆明了不让我通过?难道你不应该问线程池有哪些核心参数?每个参数具体作用是什么?往线程池中不断提交任务,线程池的处理流程是什么?这些才是你应该问的,这些八股文我已经背熟了,你不问,瞎问什么复用线程?幸亏我看了一灯的八股文,听我给你背一遍!我:线程池复用线程的逻辑很简单,就是在线程启动后,通过while死循环,不断从阻塞队列中拉取任务,从而达到了复用线程的目的。具体源码如下

面试官不按套路,竟然问我Java线程池是怎么统计线程空闲时间?

背景介绍:你刚从学校毕业后,到新公司实习,试用期又被毕业,然后你又不得不出来面试,好在面试的时候碰到个美女面试官!面试官:小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线程的?这面试官是不是想坑我?是不是摆明了不让我通过?难道你不应该问线程池有哪些核心参数?每个参数具体作用是什么?往线程池中不断提交任务,线程池的处理流程是什么?这些才是你应该问的,这些八股文我已经背熟了,你不问,瞎问什么复用线程?幸亏我看了一灯的八股文,听我给你背一遍!我:线程池复用线程的逻辑很简单,就是在线程启动后,通过while死循环,不断从阻塞队列中拉取任务,从而达到了复用线程的目的。具体源码如下

死磕Java面试系列:深拷贝与浅拷贝的实现原理

深拷贝与浅拷贝的问题,也是面试中的常客。虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝。其实工作中也常常需要实现深拷贝,今天一灯就带大家一块深入剖析一下深拷贝与浅拷贝的实现原理,并手把手教你怎么优雅的实现深拷贝。1.什么是深拷贝与浅拷贝浅拷贝:只拷贝栈内存中的数据,不拷贝堆内存中数据。深拷贝:既拷贝栈内存中的数据,又拷贝堆内存中的数据。2.浅拷贝的实现原理由于浅拷贝只拷贝了栈内存中数据,栈内存中存储的都是基本数据类型,堆内存中存储了数组、引用数据类型等。使用代码验证一下:想要实现clone功能,需要实现Cloneable接口,并重写clo

死磕Java面试系列:深拷贝与浅拷贝的实现原理

深拷贝与浅拷贝的问题,也是面试中的常客。虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝。其实工作中也常常需要实现深拷贝,今天一灯就带大家一块深入剖析一下深拷贝与浅拷贝的实现原理,并手把手教你怎么优雅的实现深拷贝。1.什么是深拷贝与浅拷贝浅拷贝:只拷贝栈内存中的数据,不拷贝堆内存中数据。深拷贝:既拷贝栈内存中的数据,又拷贝堆内存中的数据。2.浅拷贝的实现原理由于浅拷贝只拷贝了栈内存中数据,栈内存中存储的都是基本数据类型,堆内存中存储了数组、引用数据类型等。使用代码验证一下:想要实现clone功能,需要实现Cloneable接口,并重写clo

Java程序员必会Synchronized底层原理剖析

synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。但不可否认的是synchronized依然是并发首选工具,连volatile、CAS、ReentrantLock都无法动摇synchronized的地位。synchronized是工作面试中的必备技能,今天就跟着一灯一块深入剖析synchronized的底层原理。1.synchronized作用synchronized是Java提供一种隐式锁,无需开发者手动加锁释放锁。保证多线程并发情况下数据的安全性,实现了同一个时刻只有一

Java程序员必会Synchronized底层原理剖析

synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。但不可否认的是synchronized依然是并发首选工具,连volatile、CAS、ReentrantLock都无法动摇synchronized的地位。synchronized是工作面试中的必备技能,今天就跟着一灯一块深入剖析synchronized的底层原理。1.synchronized作用synchronized是Java提供一种隐式锁,无需开发者手动加锁释放锁。保证多线程并发情况下数据的安全性,实现了同一个时刻只有一
12