jdk
陈奉刚11
大数据开发与问题定位
展开
-
jdk 源码分析(20)java NIO包简单分析
优点,采用多路复用,而且因为采用buffer机制,当读写buffer时不需要阻塞。nio 也有缺点,因为nio需要很多代码去出去半包问题,而底层采用epoll也是有问题,这些问题在多并发是可能出现,因为这些问题,所以出现netty,netty能快速开发出稳定的通信框架,所以spark/kafka都有netty。原创 2017-08-08 22:05:16 · 2664 阅读 · 1 评论 -
jdk 源码分析(11)java ArrayBlockingQueue 缓存队列分析
队列没有什么,如图,分为头和尾,都是FIFO(先进先出),用数组和链表都能存储数据,数组当poll 数据后,需要整体移位(当然循环数组也是可以不移位的。),链表就方便很多。插入时在头部添加一个,删除是在尾部直接删除,原创 2017-08-03 22:29:33 · 456 阅读 · 0 评论 -
jdk 源码分析(12)java condition 条件锁
在分析ReentrantReadWriteLock 时知道多个线程在争论一个state,那么当时数据放在那里呢。都是放在syns里,这个类继承了AbstractQueuedSynchronizer,而里面的node(链表)就是存储数据的。所以其实所有的lock 是离不开的队列的。今天的condition 也是离不开队列,也离不开lock,所以其实现类就放在AbstractQueuedSynchro...原创 2017-08-03 23:11:35 · 455 阅读 · 0 评论 -
jdk 源码分析(13)java ExecutorService 和Executors
线程池首先判断有多少可以运行,1)如果可以运行,直接加入到workers 集合中,并且里面启动包装类worker,worker,在执行完当前线程后会去线程池中寻找下一个线程,并且执行2)如果当前执行的线程大于设定的数目,就线程放入缓存队列queue 里面。这里的线程,会在上(1)中执行后调用。原创 2017-08-04 22:24:05 · 438 阅读 · 0 评论 -
jdk 源码分析(14)java ThreadLocal
优点:各自线程维护自己的变量,能在线程里任何位置设置值,读取值,不需要通过参数在方法或对象中显示传递。原创 2017-08-04 23:01:15 · 363 阅读 · 0 评论 -
jdk 源码分析(15)java CountDownLatch 源码解析
CountDownLatch 和lock的机制很相似,(参考lock:jdk 源码分析(7)java ReentrantLock结构)相同点:1)lock需要队列保存竞争的线程,CountDownLatch需要队列(链表)保持等待的线程线程,2)都需要park和unpark。不同点:1)lock (重入锁)是争论的谁能将state 变成1,而CountDownLatch 是大家一起齐心协力将state 变成0,2)lock 是改变不了state的线程park,而CountDownLatch 是需原创 2017-08-05 10:51:13 · 503 阅读 · 0 评论 -
jdk 源码分析(16)java CyclicBarrier 源码解析
CyclicBarrier 的实现很简单,1)定义两个变量parties 和count,2)每次线程将count减少1,如果减少完之后count!=0,进程竟然await 。如果count==0. signalAll所有线程,同时将count置为parties,开始新的一轮3)Generation是里面的一个标准,用于中断CyclicBarrier等。所以新的一轮是会重新new 一个Generation原创 2017-08-05 11:38:39 · 453 阅读 · 0 评论 -
jdk 源码分析(17)java Semaphore 源码解析及与lock对比
总结:应该可以说Semaphore 如果说是一种特殊的lock:(因为大家首先首先lock才这么说,应该是lock是一种特殊的Semaphore)1)lock 是独占,一人享用,而Semaphore是一个多人使用,lock是电影院的VIP单人间,而Semaphore是大厅。 2)lock和Semaphore都需要排队,都有两种排队方式:公平和非公平。3)lock和Semaphore都是改变state变量,只是lock争夺0变成1,而Semaphore是争一个非零的值,因此几率大很多。4)如果初始是原创 2017-08-05 12:38:51 · 486 阅读 · 0 评论 -
jdk 源码分析(5)java ConcurrentSkipListMap结构
跳表结构之下往上分层,比如需要找117,首先会判断最高层,先比较21,在比较37 ,再比较37左边的,因为左边结束了,所以只能往下走,一直找到目标为止:寻找规则,从最高层开始,先右,再下,直到最后。原创 2017-08-02 21:02:09 · 362 阅读 · 0 评论 -
jdk 源码分析(18)java io包分析
总结:io分为读output和写input,同时通过解码可以分为字符流Reader和字节流InputStream。通过组装DataInput可以读取int,long和float和short等。通过ObjectInputStream序列化和反射可以直接读成对象readUTF等。原创 2017-08-05 16:22:23 · 711 阅读 · 0 评论 -
jdk 源码分析(1)java hashmap的结构
总而言之就是hashmap根据hash分为不同的多个链表,每个链表/树是hash相同的Node。原创 2017-08-01 23:01:50 · 552 阅读 · 0 评论 -
jdk 源码分析(2)java hashtable的结构及hashMap对比
首先hashtable 只有一种存储结构。线性链表,这和hashmap 不同,hashmap 当数据量大是采用二叉树,可以加快查询。原创 2017-08-01 23:33:38 · 361 阅读 · 0 评论 -
jdk 源码分析(21)java 动态代理和反射
java动态代理用在很多地方。spring框架,RPC框架中都使用了动态代理,动态代理很重要。首先看看静态代理:相对静态代理而已,静态代理需要对每一个方法做一次处理。如下:定义一个实体列,交个代理类,然后由代理帮忙做事 public static void main(String[] args) { People people = new S原创 2017-08-09 23:09:40 · 602 阅读 · 0 评论 -
jdk 源码分析(0) java 源码分析汇总
jdk源码分析汇总:后续会不断添加jdk 源码分析(17)java Semaphore 源码解析及与lock对比jdk 源码分析(16)java CyclicBarrier 源码解析jdk 源码分析(15)java CountDownLatch 源码解析jdk 源码分析(14)java ThreadLocaljdk 源码分析(13)java Ex原创 2017-08-05 13:21:51 · 1103 阅读 · 0 评论 -
jdk 源码分析(10)java unsafe 分析
cas大意就是先去获取一次结果,如果结果和现在不同,就直接返回,因为有其他人修改了;否则会一直尝试去修改。直到成功。原创 2017-08-03 21:37:35 · 3214 阅读 · 0 评论 -
jdk 源码分析(9)java ReentrantReadWriteLock分析
ReentrantReadWriteLock将分为两种情况,read/write,两种之间存在竞争关系,而且write里面竞争是你死我活,但是read则是共享社会。write 和前面的reentrantlock很类似,所以里面的规则也是一样。需要分为公平与不公平,也需要排队。原创 2017-08-02 23:49:38 · 357 阅读 · 0 评论 -
jdk 源码分析(7)java ReentrantLock结构
lock看上去很牛,其实真的很牛,如果你仔细研究代码发现,所以的lock都只是去争一个变量stateprivate volatile int state;如果你能将这个state从零变成1,你就可以获得资源,因为要判断是谁获得了这个state,所以需要保留这个线程的对象。因为要记录有哪些线程在争论lock,所以需要队列,既然有队列,就有队列的机制,公平机制(先到先得),非公平机制(可能存在饿死的线程,一直得不到)。这里的队列是用Node组成的链表,记录了head和tail。原创 2017-08-02 22:39:21 · 331 阅读 · 0 评论 -
jdk 源码分析(6)java BitSet结构
如果有一个Set 里面存放了(整数)1,3,4,5,23,23,12,65这些数,如果直接存储需要8×32位 ;如果采用位图,只需要用两个long整型串联。原创 2017-08-02 21:39:23 · 325 阅读 · 0 评论 -
jdk 源码分析(8)java synchronized和锁lock对比
因为synchronized 是关键字,无法看到源代码,所以只能做一个简单的分析对比了,synchronized 能锁方法,也能锁代码块,其实也是一种重入锁(也就是自己的锁,自己可以进去),代码块或方法离开,自动释放锁。lock:lock能做synchronized能做的所有的事情,但是lock 能过在资源竞争地方,通过投票等方法让其他锁释放。而sync原创 2017-08-02 22:52:28 · 1649 阅读 · 0 评论 -
jdk 源码分析(4) java Set 结构
set 只是一些披马甲的乌龟原创 2017-08-02 00:02:14 · 383 阅读 · 0 评论 -
jdk 原地分析(3)java ConcurrentHashMap结构分析
1)存储结构:存储结构和hashmap相似,但是添加一个root级别的锁。链表:static class NodeK,V> implements Map.EntryK,V> { final int hash; final K key; volatile V val; volatile NodeK,V> next; Node(int hash原创 2017-08-01 23:50:22 · 402 阅读 · 0 评论 -
jdk 源码分析(19)java net包简单分析
net里的网络连接是阻塞的,如果服务器端使用,一般每获取一个请求后启动一个新的线程,然后由新的线程处理数据。不再服务器接收请求的那里直接处理。当然也可以像nio那样,将一个线程专门处理接收,然后启动一个线程池,专门接收数据,然后一个线程池处理数据,一个线程池会写数据。原创 2017-08-05 23:45:35 · 1089 阅读 · 0 评论