上一页 1 2 3 4 5 6 7 ··· 12 下一页

Java中的ReentrantLock和synchronized两种锁定机制的对比

摘要: 多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个Thread类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 ——synchronized和volatile。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它变得更容易了。synchronized 快速回顾把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有原子性(atomicity)和可见性(visibility)。原子性意味着一个线程一次只 阅读全文
posted @ 2013-05-30 14:24 李涛_buptsse 阅读(142) 评论(0) 推荐(0)

深入分析Volatile的实现原理

摘要: 引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量。术语定义术语英文单词描述共享变量在多个线程之间能够被共享的变量被称为共享变量。共享变量包括所有的实例变量,静态变量和数组元素。他们都被存放在堆内存中,Volatil 阅读全文
posted @ 2013-05-29 16:33 李涛_buptsse 阅读(167) 评论(0) 推荐(0)

ThreadPoolExecutor运转机制详解

摘要: 最近发现几起对ThreadPoolExecutor的误用,其中包括自己,发现都是因为没有仔细看注释和内部运转机制,想当然的揣测参数导致,先看一下新建一个ThreadPoolExecutor的构建参数:[java]view plaincopypublicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue,ThreadFactorythreadFactory,RejectedExecutionHandle 阅读全文
posted @ 2013-05-26 17:03 李涛_buptsse 阅读(149) 评论(0) 推荐(0)

JDK源码 - BitSet的实现

摘要: java.util.BitSet是个很有趣的类,了解其内部实现对正确的使用非常重要。对象构造:Java代码privatefinalstaticintADDRESS_BITS_PER_WORD=6;privatefinalstaticintBITS_PER_WORD=1<<ADDRESS_BITS_PER_WORD;privatelong[]words;privatestaticintwordIndex(intbitIndex){returnbitIndex>>ADDRESS_BITS_PER_WORD;}privatevoidinitWords(intnbits){wo 阅读全文
posted @ 2013-05-26 15:38 李涛_buptsse 阅读(455) 评论(0) 推荐(0)

简单理解Java GC与幽灵引用

摘要: 1. Strong ReferenceStrongReference 是 Java 的默认引用实现,它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时Java GC 执行后将会被回收@Test publicvoidstrongReference(){ Objectreferent=newObject(); /** *通过赋值创建StrongReference */ ObjectstrongReference=referent; assertSame(referent,strongReference); referent=null; System.gc(); /** *Str... 阅读全文
posted @ 2013-05-25 23:35 李涛_buptsse 阅读(210) 评论(0) 推荐(0)

深入Java集合学习系列:LinkedHashMap的实现原理

摘要: 1. LinkedHashMap概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。 注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。2. LinkedHashMap的实现: 对于LinkedHa 阅读全文
posted @ 2013-05-22 15:05 李涛_buptsse 阅读(135) 评论(0) 推荐(0)

深入Java集合学习系列:HashMap的实现原理

摘要: 1. HashMap概述:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。2. HashMap的数据结构:在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。 从上图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。 源码如下: 阅读全文
posted @ 2013-05-22 15:04 李涛_buptsse 阅读(132) 评论(0) 推荐(0)

java TreeSet 学习

摘要: TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。TreeSet 和 TreeMap 的关系为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable { // 使用 NavigableMap 的 key 来保存 Set 集合的元素 pri 阅读全文
posted @ 2013-05-21 18:52 李涛_buptsse 阅读(184) 评论(0) 推荐(0)

java中equals()和hashcode()的关系

摘要: 虽然Java语言不直接支持关联数组 -- 可以使用任何对象作为一个索引的数组 -- 但在根Object类中使用hashCode()方法明确表示期望广泛使用HashMap(及其前辈Hashtable)。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式中支持散列可以促进基于散列的容器的开发和使用。定义对象的相等性Object类有两种方法来推断对象的标识:equals()和hashCode()。一般来说,如果您忽略了其中一种,您必须同时忽略这两种,因为两者之间有必须维持的至关重要的关系。特殊情况是根据equals()方法,如果两个对象是相等的,它们必须有相同的hashCode()值(尽 阅读全文
posted @ 2013-05-21 18:17 李涛_buptsse 阅读(158) 评论(0) 推荐(0)

HashMap与HashTable的区别

摘要: HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。3.HashTable有一个contains(Objectvalue),功能和containsV 阅读全文
posted @ 2013-05-21 15:23 李涛_buptsse 阅读(202) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 ··· 12 下一页