摘要:
■ 线程池的创建 在Java中,您可以通过调整-Xss参数来调节每个线程栈的大小(64bit系统默认1024KB),当减小该值时意味着可以创建更多的线程数,但问题是JVM资源是有限的,线程不能无限创建! 从笔者开发经验来看,线程池应该是并发包中使用频率和运用场景最多的并发框架,几乎所有并发/异步执行 阅读全文
摘要:
■ 并发原理 单核系统:线程交替执行,由于交替又快又多,给人一种同时执行的感觉多核系统:不仅可以交替执行线程,而且可以重叠执行线程补充: 本章指的并发主要指的是线程间的并发 ■ 常见的并发机制 ■ 不同系统的并发机制 UNIX:管道、消息、共享内存、信号量、信号 Linux内核:原子操作、自旋锁、信 阅读全文
摘要:
■ 前言 - 内存锁的不足 不可中断:使用内部锁(指的是 synchronized) 时,不能中断正在等待获取锁的线程 不可超时:使用内部锁时,在请求锁失败情况下,必须无限等待,没有超时效果 自动释放:使用内部锁时,内部锁必须在获取它们的代码块中被自动释放(虽然对代码来说是种简化且对异常友好) 不可 阅读全文
摘要:
■ 前言 并发包一直是 JDK 里面比较难理解的,同时也是很精美的语言,膜拜下 Doug Li 大神。作者不敢长篇大论,只求循序渐进地把并发包通过理论和实战 (代码) 的方式介绍给大家。 其实做每一件事都是挺难的,不过只要下笔就不会瞻前顾后。谢谢大家的鼓励帮助,感谢我的好基友KIRA~ 好的,热身先 阅读全文
摘要:
■ Java 锁 1. 锁的内存语义 锁可以让临界区互斥执行,还可以让释放锁的线程向同一个锁的线程发送消息 锁的释放要遵循 Happens-before 原则(锁规则:解锁必然发生在随后的加锁之前) 锁在Java中的具体表现是 Synchronized 和 Lock 2. 锁的释放与获取 线程A 释 阅读全文
摘要:
■ ThreadLocal 定义 ThreadLocal通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本 阅读全文
摘要:
■ Java 引用的相关知识 1. 强引用 强引用是Java 默认实现 的引用,JVM会尽可能长时间的保留强引用的存在(直到内存溢出) 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题:只有当没有任何对象 阅读全文
摘要:
笔者的 “多线程- 让程序更高效的运行” 关联文 感谢帮助过我的好基友们,一如既往地发布好文,让技术舞动起来 ■ Java 内存模型 1.1 Java 内存模型 Java线程间的通信由Java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见 JMM是一个抽象的概念,并非 阅读全文
摘要:
HashMap 的一些整理: (JDK 1.7) 基于哈希表的Map接口的非同步实现,定义了键映射到值的规则 此实现提供所有可选的映射操作,并允许使用null值和null键 此实现假定哈希函数将元素适当分布在各桶之间,为读取操作提供稳定性能 迭代时间与实例容量(桶的数量)及其大小(键-值映射关系数) 阅读全文
摘要:
LinkedList 的一些认识: 对于锁链的认识还是以前看动画片<圣斗士星矢>中阿舜的武器,锁链被无数次的击碎断裂,然后小宇宙爆发,锁链会自动前后拼接,组成强大的链条。"星云锁链" - 锁链无边无际、攻击范围广,仙女座暴走也是很恐怖的 ^_^可能我这样比喻并不怎么准确,双向链表也是基于这种前后节点 阅读全文