Java源码
0 人感兴趣 · 16 次引用
- 最新
- 推荐
面试官:如何防止 Java 源码被反编译?我:有点懵
java作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在。今天就拜读了一篇相关的文章,受益匪浅,知彼知己嘛!!
ScheduledThreadPoolExecutor 源码解读(二)ScheduledFutureTask 时间调度执行任务(延迟执行、周期性执行)
延迟阻塞队列DelayedWorkQueue中放的元素是ScheduledFutureTask,提交的任务被包装成ScheduledFutureTask放进工作队列,Woker工作线程消费工作队列中的任务,即调用ScheduledFutureTask.run(),ScheduledFutureTask又调用任务的run(),这点和ThreadPoolExecu
ScheduledThreadPoolExecutor 源码解读(一)DelayedWorkQueue 高度定制延迟阻塞优先工作队列
ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,所以其内部的数据结构和ThreadPoolExecutor基本一样,并在其基础上增加了按时间调度执行任务的功能,分为延迟执行任务和周期性执行任务。
ThreadPoolExecutor 源码解读(三)如何优雅的关闭线程池(shutdown、shutdownNow、awaitTermination)
学会了如何提交任务,还需要知道如何正确的关闭线程池。当关闭一个线程池时,有的工作线程还正在执行任务,有的调用者正在向线程池提交任务,并且工作队列中可能还有未执行的任务。因此,关闭过程不可能是瞬时的,而是一个平滑过渡的过程。
ThreadPoolExecutor 源码解读(二)execute 提交任务,Worker 详解。如何执行任务?如何回收空闲线程?
了解了线程池基本属性的概念是远远不够的,还需要知道每一个属性在源码中的体现,比如提交任务的过程中是如何将核心线程数、工作队列、最大线程数以及拒绝策略等连起来的?工作线程是如何执行任务代码的?线程池是如何回收空闲线程的?
ThreadPoolExecutor 源码解读(一)重新认识 ThreadPoolExecutor(核心参数、生命周期、位运算、ThreadFactory、拒接策略)
在Java中,创建一个线程new Thread,就像创建一个对象一样简单,但实际上创建线程远不是创建一个对象那么简单。创建对象,仅仅是在 JVM 的堆里分配一块内存而已;而创建一个线程,却需要调用操作系统内核的 API,并且要为线程分配一系列的资源,所以线程是一
FutureTask 源码解读,阻塞获取异步计算结果(阻塞、取消、装饰器、适配器、Callable)
FutureTask 继承自Runnable,所以也可以实现异步执行的效果,但是和常规的异步执行方式不同,常规异步只要求异步的过程是正确的就可以了,而FutureTask不仅可以知道异步执行的状态,还可以知道异步结果。那它是如何实现的呢?
CopyOnWriteArrayList 源码解读之 CopyOnWrite 思想的利与弊
CopyOnWriteArrayList作为并发容器集合,在窥探其原理之前,先想想,倘若让我们自己来开发一个并发集合,该如何设计?
关于 ReentrantReadWriteLock,首个获取读锁的线程单独记录问题讨论(firstReader 和 firstReaderHoldCount)
读了ReentrantReadWriteLock的源码,知道读写锁共用一个state,低16位表示写锁的状态和重入,高16位表示读锁的状态,右移16位表示持有读锁的线程数,那么该读锁是如何记录每个线程的重入呢?
ConcurrentHashMap 源码深度解析(二)(java8)直呼 Doug Lea 是真的细(带你参透扩容机制)
扩容是重头戏,看过的人都说难。确实,和java7版本比起来,难度真不是一个量级的。有些细节看着莫名其妙,一想就是好几天,看似想明白也只能算是猜想合理,直呼Doug Lea的心思是真的细啊!
ConcurrentHashMap 源码深度解析(一)(java8)不可不知的基本概念(助你拿下源码事半功倍)
ConcurrentHashMap java1.8数据结构采用数组+链表+红黑树,废弃分段锁`Segement`,进一步降低锁的粒度,可将锁直接加在数组占位节点上。
ConcurrentHashMap 源码深度解析(java7)原来如此简单 (写的真好,建议收藏)
ConcurrentHashMap算是java基础中非常基本的知识点,不仅在日常开发中经常用到,面试中也是经久不衰的话题。它基本沿用HashMap的接口定义,使得即使不了解其底层原理,也能无缝切换。
InheritableThreadLocal 源码解析,子线程如何获取父线程的本地变量?
日常工作中,经常使用ThreadLocal来避免线程并发问题,每个线程访问自己本地的变量,没有竞争,没有锁,非常高效。现在有一个业务场景,需要创建一些子线程来执行任务,主线程中设置了ThreadLocal的值,想在子线程中获取,能获取到吗?答案是:不能。
ThreadLocal 超深度源码解读,为什么要注意内存泄漏?不要道听途说,源码底下见真知!
使用完ThreadLocal一定要调用remove呀,不然会内存泄漏,因为key是弱引用会被下次gc,而value的强引用会一直存在,若线程一直不销毁,value就一直不gc掉,导致内存泄漏。