java源码
文章平均质量分 68
ignorewho
笑你我枉花光心计 爱竞逐镜花那美丽
展开
-
Thread源码-类结构及变量含义
环境:jdk1.8Thread类结构:public class Thread implements Runnable可以看出:1.Thread是基于Runnable实现,实现了run方法Thread类变量://线程名称,用volatitle修饰,保证其可见性private volatile String name;//线程优先级,值:1-10,默认为5,值越大,优先级越高private i...原创 2018-07-08 17:03:17 · 255 阅读 · 0 评论 -
Thread源码-构造器及初始化
环境:jdk1.8对Thread的构造器进行预分析,发现Thread类的构造器中都调用了init初始化方法,所以先分析一下init方法:1.首先看下最核心的init方法:代码如下:/** * 初始化线程 * @param g 所属线程组 * @param target 运行实例 * @param name 线程名称 * @param stackSize 线程栈大小 * @param a...原创 2018-07-08 17:50:12 · 367 阅读 · 0 评论 -
HashMap源码-get方法
环境:jdk1.8get方法源码如下://传入参数:查询参数key值,这里是Object类型,不是泛型public V get(Object key) { Node<K,V> e; //调用核心方法getNode来获取对应值 return (e = getNode(hash(key), key)) == null ? null : e.va...原创 2018-06-10 17:39:40 · 491 阅读 · 0 评论 -
HashMap源码-put方法
HashMap(1.8)HashMap的put方法: 代码如下: public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } 上面传入参数泛型K、V是在初始化HashMap对象时指定好的 核心方法putVal,传入参数:1.根据key计算得到的哈希值 2.key值 ...原创 2018-06-02 19:42:12 · 155 阅读 · 0 评论 -
HashMap源码-扩容resize方法
HashMap(1.8)HashMap的resize方法: 代码如下: final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; //获取旧表的容量值 int oldCap = (oldTab == null) ? 0 : oldTab.length; //获取旧的阈值 in...原创 2018-05-28 21:24:51 · 414 阅读 · 0 评论 -
HashMap源码-常量及构造器
HashMap(jdk1.8)HashMap的类定义:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, SerializableHashMap继承了AbstractMap抽象类,实现了Map接口、可克隆接口、可序列化接口AbstractMap...原创 2018-05-28 08:48:09 · 198 阅读 · 0 评论 -
ThreadLocal源码
我们对ThreadLocal的两个主要公共方法set和get方法进行分析:一、首先看下set方法: public void set(T value) { Thread t = Thread.currentThread(); //根据当前线程获取ThreadLocal的内部类ThreadLocalMap实例 ThreadLocalMap map = getMap(t);...原创 2018-05-25 15:27:02 · 106 阅读 · 0 评论 -
Thread源码-中断方法
环境:jdk1.8前言:之前写过一篇文章-JAVA并发-线程中断机制,里面详细讲述了线程中断机制的原理,并通过实际例子演示了线程中断方法的使用,因为最近在看Thread类的源码,所以一起再把中断方法的源码也学习了一遍,作为对之前知识得补充和加强。 interrupt方法源码如下:/** * Interrupts this thread. * * 1.如果当前线程在设置自己...原创 2018-07-16 18:07:52 · 171 阅读 · 0 评论 -
Thread源码-start及stop方法
环境:jdk1.8start方法源码如下:/** * 同步方法:启动线程 */public synchronized void start(){ //判断线程状态是否处于"NEW",0表示"NEW",如果不是则抛出异常 if (threadStatus != 0) throw new IllegalThreadStateException(); //添加到线程组中 group...原创 2018-07-14 15:58:04 · 1052 阅读 · 0 评论