java
文章平均质量分 61
iteye_14612
这个作者很懒,什么都没留下…
展开
-
java并发编程-1
以前研究过并发编程,但是没有深入,这次有时间了深入研究下。并发编程中只要掌握两个点就好了,一个是线程之间的互斥,一个是线程的通信。1、互斥: 互斥的概念就是当线程A在执行某个方法时,只有当A完全执行完之后其他的线程才可以访问这个方法,如果A没有执行完,那么其他要访问这个方法的线程将阻塞。2、通信:如果要很多线程都阻塞了,那么当A执行完之后应该怎么办呢?是让A线程继续执行还是随机选取一个...原创 2015-12-16 16:52:24 · 60 阅读 · 0 评论 -
juc - Semaphore源码解读
Semaphore,翻译叫做信号灯,是用来做资源访问限制的,他维持了一个准许指令的集合,如果当前没有可以指令的话,调用一次acquire就会将当前的线程阻塞,没调用一次release就会将当前线程持有的指令还回指令集合。他的内部实现跟CountDownLatch类似,也是直接使用的aqs,在创建的时候就会设定一个state标记,用来表示可以同时被使用准许指令的最大值,在某个线程调用acquir...原创 2017-04-15 14:48:43 · 140 阅读 · 0 评论 -
juc - CyclicBarrier源码解读
之前看了CountDownLatch,他的实现是使用了aqs,提前设置好state的值,如果state不是0的时候调用await就会阻塞当前线程,加入到aqs的队列中,调用countDown就会减小state的值,当state的值时0的时候就会释放锁,将队列中的所有的线程释放,开始运行。这个CountDownLatch可以用于不同种类的线程之间,比如我们在连zk的时候,因为zkClient内部...原创 2017-04-15 11:53:53 · 133 阅读 · 0 评论 -
juc - CountDownLatch源码解读
之前再学zk的时候,用到了这个CountDownLatch,他的作用是等其他的线程都执行完了某个操作之后再让当前的线程执行,在其他线程没有执行完之前当前线程要阻塞,这样就能实现线程之间的通信了。因为最近刚学习了ReentrantLock,所以趁着还对aqs算是熟悉就看了一下CountDownLatch的原理,记录一下。CountDownLatch有两个主要的方法,一个是await,用于在不...原创 2017-04-11 17:29:05 · 149 阅读 · 0 评论 -
juc - Condition源码解读
之前写过ReentrantLock的源码的博客,但是还有个重要的东西没有介绍——Condition,他的用法我就不介绍了(这种介绍性的博客我不喜欢写),我今天就写一下Condition的实现原理,还是从Conditon的常用方法入手。1、await():这个方法由当前获得锁的线程调用,意思是释放锁,挂起自己并且唤醒等待当前线程持有的锁的其他线程(在aqs的等待队列中的其他节点),类似于sy...原创 2017-04-10 19:29:11 · 158 阅读 · 0 评论 -
juc - ReentrantLock源码解读(二)
上一篇介绍了不公平的重入锁,那什么是公平,什么是不公平呢?仅仅通过第一篇博客可以回答这个问题的,但是往往我们会忽略掉这个问题,看一下公屏和不公平的差别在哪里能勾引起我们更多的思考,这样就能解释什么是公平、非公平了。(在继续看这篇博客之前,请一定要读一下http://suichangkele.iteye.com/blog/2368173 这个博客)。在ReentrantLock的构造方法中,...原创 2017-04-08 18:06:46 · 172 阅读 · 0 评论 -
juc - ReentrantLock源码解读(一)
ReentrantLock,翻译过来叫做重入锁,是实现线程安全的一个方式,和synchronized的作用类似,但是他的实现原理是什么呢,在查看了很多的博客之后,我决定自己写一篇,形成自己的理解。从ReentrantLock的方法一个一个的来吧。补充:博客中会不停的提到一个叫做标记的概念,是我自己给起的名字,就是AbstractQueuedSynchronizer的private vola...原创 2017-04-08 17:55:36 · 161 阅读 · 0 评论 -
关于jvm监控配置的笔记
1、我想记录gc的历史,方便以后的分析在启动jvm的时候添加如下: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:D:/gc.log -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10K -XX:+UseGCLogFileRotation ...原创 2017-01-16 16:26:33 · 90 阅读 · 0 评论 -
minor GC,major GC,full GC
看这篇博客 http://www.open-open.com/lib/view/open1429883238291.html原创 2017-01-12 14:41:39 · 77 阅读 · 0 评论 -
java虚拟机的的运行模式
java虚拟机有两种模式,一个中server模式,即当做服务器来使用,一个是client模式,用在图形界面中。这个博客写的好:http://www.cnblogs.com/love-jishu/p/4402156.html...原创 2017-01-12 14:31:38 · 271 阅读 · 0 评论 -
如何选择性得加载某些包下面的类
上一篇博客刚刚写了类加载器的东西,这里马上就用到了,使用类加载器来加载某个包下面的类,比如我们的代码时com.xxx.yyy,那么我想在容器启动的时候加载包下面的某些类来做些一些启动前的检查,就需要我们使用类加载器来加载类了。我想到这个的原因有两个:一个是spring的路径扫描,即spring会扫面某个路径下面的bean,然后放入spring的ioc容器,这个一直以来都困惑着我,她是如何做到...原创 2016-07-23 10:29:02 · 247 阅读 · 0 评论 -
类加载器
我一直没有掌握java的类加载器,直到最近我看log4j2的源码时又好好研究了一下,才稍微懂点。在log4j2中有个功能是收集某个包下面的所有的类,以及写在某个文件中的类,这些都是需要classloader来完成的,于是顺着他的思路以及自己做实验我才慢慢稍微掌握了classLoader。java的classLoader分为好几类,并且是有阶级关系的,一层一层的继承。最跟类是java自带的,...原创 2016-07-23 09:59:52 · 69 阅读 · 0 评论 -
java网络编程总结
最近在研究kafka的源码,先说一下感触,虽然kafka不是用java写的,只是提供了java的客户端,但是单纯这个客户端的代码已经让我焦头烂额了,可以很肯定的说现在的我真的是太菜了,需要学习的东西太多,不过乐观点的说我的成长空间也很大,而且读源码真的是非常好的学习机会,很推荐有时间的朋友们读一个框架的源码。通过读源码我发现了很多的不足,这里仅仅记录一些关于java网络编程的,顺便将以前总结的...原创 2015-12-22 19:58:46 · 76 阅读 · 0 评论 -
java并发编程-3
之前做的并发1、2都是做的Runnable,虽然能够实现线程之间的互斥、通信,但是不能实现两个线程之间的信息共享,必须有这样一个需求:有一个service的操作需要发送信息到另一台服务器并且等待确认这个信息被目标机器接受,这个操作很费时间,因为要阻塞,并且造成机器性能的浪费,所以必须要开启多个线程来处理这个service,让一个线程去发送这个信息,另一个线程一边继续操作,一边等待另一个线程的确...原创 2015-12-17 10:48:17 · 55 阅读 · 0 评论 -
java并发编程-2
以前讨论了线程之间的互斥,这里讨论线程之间的通信。线程之间的通信即A线程唤醒正在阻塞的其他线程,使其继续执行。最传统的方式即wait,notify,先上例子。这里要实现的效果是A线程输出一次“AAA",然后B线程输出一下“BBB”,由于输出AAA或者BBB不是原子性操作(即输出不是一下子就能完成的,这期间CPU可能跑到其他线程上去执行)所以显然线程之间的互斥是必须的,我们这里使用synch...原创 2015-12-17 09:42:30 · 85 阅读 · 0 评论 -
juc-ThreadPoolExecutor线程池总结
之前对线程池的理解很是主观,我的理解是在线程池初始化的时候就生成指定的数量的线程,然后将一些任务添加到一个阻塞队列中,然后多个线程同时从阻塞队列中取任务执行,当没有任务时线程阻塞,今天下午看了下大神的博客以及源码,发现我自己的理解有些偏颇,所以今天再总结一下。我们创建线程池时一般都是通过使用Executors.newXXX来创建,所以我们从这个方法入手,无论是创建Fixed还是cached...原创 2017-04-15 19:04:22 · 153 阅读 · 0 评论