写点什么

Java源码

0 人感兴趣 · 16 次引用

  • 最新
  • 推荐

面试官:如何防止 Java 源码被反编译?我:有点懵

java作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在。今天就拜读了一篇相关的文章,受益匪浅,知彼知己嘛!!

ScheduledThreadPoolExecutor 源码解读(二)ScheduledFutureTask 时间调度执行任务(延迟执行、周期性执行)

用户头像
徐同学呀
2021-04-17

延迟阻塞队列DelayedWorkQueue中放的元素是ScheduledFutureTask,提交的任务被包装成ScheduledFutureTask放进工作队列,Woker工作线程消费工作队列中的任务,即调用ScheduledFutureTask.run(),ScheduledFutureTask又调用任务的run(),这点和ThreadPoolExecu

ScheduledThreadPoolExecutor 源码解读(一)DelayedWorkQueue 高度定制延迟阻塞优先工作队列

用户头像
徐同学呀
2021-04-17

ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,所以其内部的数据结构和ThreadPoolExecutor基本一样,并在其基础上增加了按时间调度执行任务的功能,分为延迟执行任务和周期性执行任务。

ThreadPoolExecutor 源码解读(三)如何优雅的关闭线程池(shutdown、shutdownNow、awaitTermination)

用户头像
徐同学呀
2021-04-17

学会了如何提交任务,还需要知道如何正确的关闭线程池。当关闭一个线程池时,有的工作线程还正在执行任务,有的调用者正在向线程池提交任务,并且工作队列中可能还有未执行的任务。因此,关闭过程不可能是瞬时的,而是一个平滑过渡的过程。

ThreadPoolExecutor 源码解读(二)execute 提交任务,Worker 详解。如何执行任务?如何回收空闲线程?

用户头像
徐同学呀
2021-04-17

了解了线程池基本属性的概念是远远不够的,还需要知道每一个属性在源码中的体现,比如提交任务的过程中是如何将核心线程数、工作队列、最大线程数以及拒绝策略等连起来的?工作线程是如何执行任务代码的?线程池是如何回收空闲线程的?

ThreadPoolExecutor 源码解读(一)重新认识 ThreadPoolExecutor(核心参数、生命周期、位运算、ThreadFactory、拒接策略)

用户头像
徐同学呀
2021-04-17

在Java中,创建一个线程new Thread,就像创建一个对象一样简单,但实际上创建线程远不是创建一个对象那么简单。创建对象,仅仅是在 JVM 的堆里分配一块内存而已;而创建一个线程,却需要调用操作系统内核的 API,并且要为线程分配一系列的资源,所以线程是一

FutureTask 源码解读,阻塞获取异步计算结果(阻塞、取消、装饰器、适配器、Callable)

用户头像
徐同学呀
2021-04-17

FutureTask 继承自Runnable,所以也可以实现异步执行的效果,但是和常规的异步执行方式不同,常规异步只要求异步的过程是正确的就可以了,而FutureTask不仅可以知道异步执行的状态,还可以知道异步结果。那它是如何实现的呢?

CopyOnWriteArrayList 源码解读之 CopyOnWrite 思想的利与弊

用户头像
徐同学呀
2021-04-17

CopyOnWriteArrayList作为并发容器集合,在窥探其原理之前,先想想,倘若让我们自己来开发一个并发集合,该如何设计?

https://static001.geekbang.org/infoq/03/03477d1f6b48b9d4ecde02d8f7c26adf.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

关于 ReentrantReadWriteLock,首个获取读锁的线程单独记录问题讨论(firstReader 和 firstReaderHoldCount)

用户头像
徐同学呀
2021-04-17

读了ReentrantReadWriteLock的源码,知道读写锁共用一个state,低16位表示写锁的状态和重入,高16位表示读锁的状态,右移16位表示持有读锁的线程数,那么该读锁是如何记录每个线程的重入呢?

https://static001.geekbang.org/infoq/1d/1d91f32be12e8680abe959beb8fb1fc8.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

ConcurrentHashMap 源码深度解析(二)(java8)直呼 Doug Lea 是真的细(带你参透扩容机制)

用户头像
徐同学呀
2021-04-15

扩容是重头戏,看过的人都说难。确实,和java7版本比起来,难度真不是一个量级的。有些细节看着莫名其妙,一想就是好几天,看似想明白也只能算是猜想合理,直呼Doug Lea的心思是真的细啊!

https://static001.geekbang.org/infoq/ad/ad9a2701680fffb207c4be3671e2c63b.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

ConcurrentHashMap 源码深度解析(一)(java8)不可不知的基本概念(助你拿下源码事半功倍)

用户头像
徐同学呀
2021-04-15

ConcurrentHashMap java1.8数据结构采用数组+链表+红黑树,废弃分段锁`Segement`,进一步降低锁的粒度,可将锁直接加在数组占位节点上。

https://static001.geekbang.org/infoq/ab/ab4a0a99735373993057f1232a07c380.gif?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

ConcurrentHashMap 源码深度解析(java7)原来如此简单 (写的真好,建议收藏)

用户头像
徐同学呀
2021-04-15

ConcurrentHashMap算是java基础中非常基本的知识点,不仅在日常开发中经常用到,面试中也是经久不衰的话题。它基本沿用HashMap的接口定义,使得即使不了解其底层原理,也能无缝切换。

https://static001.geekbang.org/infoq/82/820854b92f533ad5557e59ad769782b1.jpeg?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

InheritableThreadLocal 源码解析,子线程如何获取父线程的本地变量?

用户头像
徐同学呀
2021-04-13

日常工作中,经常使用ThreadLocal来避免线程并发问题,每个线程访问自己本地的变量,没有竞争,没有锁,非常高效。现在有一个业务场景,需要创建一些子线程来执行任务,主线程中设置了ThreadLocal的值,想在子线程中获取,能获取到吗?答案是:不能。

https://static001.geekbang.org/infoq/05/054953294469195e58e298016737a19e.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

ThreadLocal 超深度源码解读,为什么要注意内存泄漏?不要道听途说,源码底下见真知!

用户头像
徐同学呀
2021-04-13

使用完ThreadLocal一定要调用remove呀,不然会内存泄漏,因为key是弱引用会被下次gc,而value的强引用会一直存在,若线程一直不销毁,value就一直不gc掉,导致内存泄漏。

https://static001.geekbang.org/infoq/af/af43175c57ef4c407326a3e7d12106e8.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

【Java 试题】AQS 解析

AQS是java并发包的一个重要概念。Java中可重入锁ReentrantLock就是基于AbstractQueuedSynchronizer(AQS)的。因此,理解AQS的实现原理,对Java锁理解非常重要。本篇将结合JDK1.8源码,对AQS进行分析。

https://static001.geekbang.org/infoq/74/749e6dec66777c1dc3ef7500e4ff8125.png?x-oss-process=image%2Fresize%2Cw_416%2Ch_234

Java HashMap 的那么多为什么

用户头像
多选参数
2020-07-16

Java HashMap 一些参数设置的原因,以及这么源码的简单分析。

Java源码_Java源码技术文章_InfoQ写作社区