java源码
源码
30年后世界会是怎样
这个作者很懒,什么都没留下…
展开
-
ThreadLocal原理(源码)
先说结论:ThreadLocal本身并不是,也不会存储thread-local变量,而是操作thread-local变量的工具。真正的thread-local变量是存储在Thread里的ThreadLocalMap(ThreadLocal的静态内部类)的对象,而且ThreadLocalMap的对象中的ThreadLocalMap.Entry[] table的元素中还存储了ThreadLocal的信息。详情可以看源码。ThreadLocal部分源码: /** * Retu..原创 2020-08-01 16:14:19 · 231 阅读 · 0 评论 -
静态内部类实现单例模式以及不需要显式使用锁的原因
先说结论:静态内部类实现单例模式,是借助了类加载器加载类的特性实现的,类加载器在加载类时使用了synchronized关键字.单例模式代码:public class SingletonDemo { public static void main(String[] args) { SingletonDemo sd1 = getInstance(); SingletonDemo sd2 = getInstance(); System.out原创 2020-07-02 16:48:06 · 646 阅读 · 0 评论 -
java线程池原理--如何实现线程和任务分离,并保证线程在一定时间内不销毁的?
先说下结论:如何实现线程和任务分离呢?线程和任务都是实现了Runnable接口的类,不同的是,扮演线程的类通过start()方法创建线程并执行其中的run()方法,而扮演任务的类则不会调用start()方法,在线程的run()方法中能获取到任务的引用,并直接调用任务的run方法(无论是直接在run()方法中使用,还是在somemethod()方法中,然后在run()方法中调用somemethod()).如何实现不销毁的呢?首先,纠正一点,有人说在使用线程池的时候,从中找一个空闲的线程拿过来用原创 2020-07-02 15:33:49 · 1378 阅读 · 0 评论 -
java基础数据类型大小
可以通过基础类型对应的包装类获取基础类型的大小,如char,可以查看Character类: /** * The number of bits used to represent a {@code char} value in unsigned * binary form, constant {@code 16}. * * @since 1.5 */ public static final int SIZE = 16; /*.原创 2020-06-25 18:44:56 · 287 阅读 · 0 评论 -
Java语言中:float、double数据类型在内存中是如何存储的
java语言中,float类型数字在计算机中用4个字节(32位)来存储。double类型占用8个字节(64位)。从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。 按照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法:用符号、指数和尾数来表示。指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。底数定为2,即把一个浮点数表示为尾数乘.转载 2020-06-25 18:28:00 · 890 阅读 · 0 评论 -
Double的MIN_VALUE和Integer的MIN_VALUE
Integer的MIN_VALUE是:-2147483648MAX_VALUE是:2147483647Integer的源码:/** * A constant holding the minimum value an {@code int} can * have, -2<sup>31</sup>. */ @Native public static final int MIN_VALUE = 0x80000000; /**原创 2020-06-25 18:25:28 · 612 阅读 · 0 评论 -
Java LinkedList源码剖析
LinkedList总体介绍方法剖析add()remove()get()set()LinkedList总体介绍LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。这样看来,LinkedList简直就是个全能冠军。当你需要使用栈或者队列时,可以考虑使用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是,Java里根本没有一个叫转载 2020-06-09 22:26:18 · 137 阅读 · 0 评论 -
深入理解Java PriorityQueue
PriorityQueue总体介绍方法剖析add()和offer()element()和peek()remove()和poll()remove(Object o)PriorityQueueJava中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建立清晰而深入的认识。总体介绍前面以Java转载 2020-06-09 22:24:33 · 162 阅读 · 0 评论 -
ArrayDeque
前言总体介绍方法剖析addFirst()addLast()pollFirst()pollLast()peekFirst()peekLast()前言Java里有一个叫做Stack的类,却没有叫做Queue的类(它是个接口名字)。当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque;既然Queue只是一个接口,当需要使用队列时也就首选ArrayDeque了(次选是LinkedList)。总体介绍要讲栈和队列,首先要讲Deque接转载 2020-06-09 22:23:02 · 411 阅读 · 0 评论 -
Java Arrays工具类用法详解
Arrays类功能描述Arrays类是一个工具类,其中包含了数组操作的很多方法,比如搜索和排序; Arrays类中的方法均为static修饰的,可以直接通过Arrays.xxx(xxx)的形式调用方法。几个重要方法 1.asList(T... a)由给定的数组a,返回一个固定大小的List对象。在这里,着重解释一下前面这句话的深层含义,我们可以看Arrays类的源码,来帮助我...转载 2020-03-08 18:40:24 · 281 阅读 · 0 评论