
多线程与并发
闭门车
这个作者很懒,什么都没留下…
展开
-
读JAVA并发包之AbstractQueuedSynchronizer,有更新
java.util.concurrent.ThreadPoolExecutor内部类Worker继承了AbstractQueuedSynchronizer,这个不说了,说说ReentrantLock吧。从创建锁对象开始,有的同学之前已经注意到了,创建对象的时候是可以加参数的。 ReentrantLock rl1=new ReentrantLock(false);ReentrantL...原创 2017-04-11 17:14:19 · 260 阅读 · 0 评论 -
详解LinkedBlockingQueue
LinkedBlockingQueue,许多书中称之为无界队列,那么他真的是无界队列吗?从数据结构看,它是链表型的队列,链表的一个特性就是长度无限制,那LinkedBlockingQueue是不是跟链表一样长度无限制呢,答案是否定的,有长度限制。 BlockingQueue<Object> bq1=new LinkedBlockingQueue<Object>(1...原创 2017-05-15 15:59:58 · 1044 阅读 · 0 评论 -
java 线程池详解
线程池原理待补充1.6之前主要的线程池都是由ThreadPoolExecutor来实现的首先来看下ThreadPoolExecutor的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...原创 2017-05-12 12:36:56 · 238 阅读 · 0 评论 -
JAVA CAS原理分析
http://blog.youkuaiyun.com/hsuxu/article/details/9467651CAS是Compare and Swap的简写,比较然后交换。以类AtomicInteger中的compareAndSet方法为例,可以看到调用的是unsafe中的compareAndSwapInt来实现的,并没有使用锁。 public final boolean compareAndSet(...转载 2017-05-02 23:35:47 · 342 阅读 · 0 评论 -
volatile的适用场景
http://blog.youkuaiyun.com/vking_wang/article/details/9982709转载 2017-05-10 01:26:42 · 299 阅读 · 0 评论 -
红黑树之 原理和算法详细介绍
http://www.cnblogs.com/skywang12345/p/3245399.html转载 2017-05-12 12:06:16 · 292 阅读 · 0 评论 -
Unsafe源码解析
Unsafe源码解析 mark原创 2018-03-21 13:36:42 · 268 阅读 · 0 评论 -
Thread的状态
Thread的状态原创 2017-04-11 17:16:12 · 442 阅读 · 0 评论 -
笔试题:和wait()比较一下,thread中的sleep()的方法为什么被设计为静态方法?
今天群里讨论了一个面试题,很有代表意义,记录一下首先 这2个方法修改状态的对象不一样;一个是操作 监视器对象的 一个是才做线程的。第2 安全性问题; 如果 sleep是实例方法 因为在jvm中可以拿到thread实例的引用 所以 就会出现别的线程强制另外一个线程睡眠的方法这样 就出现了线程的执行逻辑以及 内存模型的不可控so 只能 把目标设定为当前的线程。转载 2015-01-07 15:46:45 · 1207 阅读 · 0 评论 -
volatile内存模型
http://www.infoq.com/cn/articles/ftf-java-volatile转载 2015-03-17 16:29:59 · 399 阅读 · 0 评论 -
jstack查找多线程开发的问题
今天写了个多线程计算TOP-K问题的程序,运行的时候发行线程池没有退出,在eclipse里bug的时候一直显示是running的状态,如图:找人问题了下,说是用jstack打出线程信息可以查看到相关信息,首先用windows的任务管理器找到这个进程,查找PID为1040,然后在java_home/bin下执行jstack 1040然后查找第134行,发现是lock.l原创 2016-09-01 18:09:54 · 335 阅读 · 0 评论 -
纸上谈兵之二线程池的分类用法
newFixedThreadPool() 将创建一个固定长度的线程池,每当提交一个任务时就创建一个线程,直到达到线程池的最大数量,这是线程池的规模将不再变化,如果某个线程由于发生了未预期的Exception而结束,那么线程池会补充一个新的线程。newCachedThreadPool() 将创建一个可缓存的线程池,如果线程池的当前规模超过了处理需求时,那么将回收空闲的线程,而当需求增加时,则原创 2016-12-22 18:30:58 · 218 阅读 · 0 评论 -
纸上谈兵之一 线程池的创建
首先来看下线程池的接口public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thread, or in the calling原创 2016-12-20 16:18:55 · 212 阅读 · 0 评论