
java核心
文章平均质量分 87
xlSeeker
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入学习java集合:LinkedList<E>实现
1、LinkedList类图 LinkedList是 List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。此类实现 Deque 接口,为原创 2016-05-27 21:25:30 · 768 阅读 · 0 评论 -
深入学习java并发编程:ConcurrentHashMap<K, V>实现
1、ConcurrentHashMap设计类图 ConcurrentHashMap是线程安全并且高效的HashMap,通过使用锁分段技术提升并发访问率。HashTable在竞争激烈的并发环境下效率低下的原因是所有访问HashTable的线程必须竞争同一把锁,如果容器有多把锁,每一把锁都锁容器中一部分数据,那么当访问容器中不同数据段时,线程间就不存在锁竞争,从而可以提高并发原创 2016-05-31 17:37:10 · 832 阅读 · 0 评论 -
深入学习java并发编程:Thread类的使用
以下是本文的目录大纲: 一.线程的状态 二.上下文切换 三.Thread类中的方法 转载自 http://www.cnblogs.com/dolphin0520/p/3920357.html一.线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法转载 2016-05-31 21:09:24 · 531 阅读 · 0 评论 -
深入学习java并发编程:阻塞队列
使用非阻塞队列的时候一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要我们编写代码去唤醒)。这样提供了极大的方便性。转载 2016-05-31 21:49:44 · 375 阅读 · 0 评论 -
深入学习java并发编程:内存模型(一)基础
并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必转载 2016-06-01 19:09:21 · 446 阅读 · 0 评论 -
深入学习java并发编程:内存模型(二)重排序
数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a = 1;b = a;写一个变量之后,再读这个位置。写后写a = 1;a = 2;写一个变量之后,再写这个变量。读后写a = b;b = 1;读一个变量之后转载 2016-06-01 19:47:19 · 461 阅读 · 0 评论 -
深入学习java并发编程:CountDownLatch、CyclicBarrier
在java并发包中提供了一些非常有用的辅助类来帮助我们进行并发编程,这些类包括CountDownLatch、CyclicBarrier以及Semaphore。1、CountDownLatch1 ) 类图 2)CountDownLatch实现 CountDownLatch同步组件同ReetrantLock一样,也是基于抽象队列同步器,在内部聚合引用了自原创 2016-06-01 22:05:40 · 537 阅读 · 0 评论 -
深入学习java并发编程:线程池ThreadPoolExecutor实现以及使用
Java中的线程池是应用场景最多的并发编程模型,很多需要异步或并发执行任务的程序都可以使用线程池。在程序中合理的利用线程池能够有如下好处: 1):降低资源消耗。通过重复利用已创建的线程降低线程创建以及销毁造成的消耗。 2):提高响应速度。当任务到达时,可以不需要等待线程的创建就能立即执行。 3):提高线程可管理性。线程是稀缺资源,如果无限制的创建,不仅消耗资源,还会降原创 2016-06-02 22:11:06 · 871 阅读 · 0 评论 -
深入学习java并发编程:内存模型(三)顺序一致性
数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM对正确同步的多线程程序的内存一转载 2016-06-02 22:32:01 · 866 阅读 · 0 评论 -
深入学习java并发编程:内存模型(四)volatile
volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { //使用volatile声明64位的long型变转载 2016-06-04 21:35:01 · 481 阅读 · 0 评论 -
深入学习java并发编程:CopyOnWriteArrayList<E>实现
1、CopyOnWriteArrayList涉及类图 Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是Co原创 2016-05-30 21:44:51 · 530 阅读 · 0 评论 -
深入学习java并发编程:ReentrantLock
1、相关类图 2、ReentrantLock实现分析说明 ReentrantLock重入锁能支持一个线程对资源重复的加锁,而不会把自己锁死。此外,还支持获取锁是的公平和非公平性选择。ReentrantLock虽然没有像synchronized关键字一样支持隐式的重进入,但是调用lock()方,在已经获取到锁的情况下,能够再次调用lock()方法获取锁,而不被阻塞。原创 2016-05-30 21:41:57 · 423 阅读 · 0 评论 -
深入学习java集合:ArrayList<E>实现
1、ArrayList类图 ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加原创 2016-05-27 21:22:00 · 602 阅读 · 0 评论 -
深入学习java集合:JAVA集合类主要接口
1、java集合类关系图 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。 Collection 接口是 Li原创 2016-05-27 21:01:57 · 2100 阅读 · 1 评论 -
深入学习java集合:HashSet<E>实现
1、HashSet类图 HashSet是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。HashSet按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。HashSet具有以下特点: –不能保证元素的排列顺序 –HashSet不是线程原创 2016-05-27 21:32:33 · 565 阅读 · 0 评论 -
深入学习java集合:TreeSet<E>实现
1、TreeSet类图 TreeSet是 SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方法:自然排序和定制排序,默认情况下,TreeSet采用自然排序。 TreeSet会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列原创 2016-05-27 21:35:31 · 597 阅读 · 0 评论 -
深入学习java集合:HashMap<K,V>实现
1、HashMap类图 Map 用于保存具有映射关系的数据,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 Key,另外一组用于保存 Map 里的 Value,Map 中的 key 和 value 都可以是任何引用类型的数据。Map 中的 Key 不允许重复,即同一个 Map 对象的任何两个 Key 通过 equals 方法比较中返回 fal原创 2016-05-28 19:29:37 · 1661 阅读 · 0 评论 -
深入学习java集合:LinkedHashMap<K,V>实现
1、LinkedHashMap类图 LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。原创 2016-05-28 19:34:02 · 1152 阅读 · 0 评论 -
深入学习java集合:Hashtable<K,V>实现
1、Hashtable类图 从中可以看出HashTable继承Dictionary类,实现Map接口。其中Dictionary类是任何可将键映射到相应值的类(如 Hashtable)的抽象父类。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键至多与一个值相关联。Map是"key-value键值对"接口。 Hashta原创 2016-05-28 19:36:25 · 770 阅读 · 0 评论 -
深入学习java并发编程:Lock与AbstractQueuedSynchronizer(AQS)实现
1、相关类图2、Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是依靠synchronized关键字实现锁的功能的,而从java SE5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁的功能,只是在使用是需要显原创 2016-05-29 23:47:10 · 773 阅读 · 0 评论 -
深入学习java并发编程:ThreadLocal<T>实现
1、ThreadLocal相关类图 ThreadLocal为解决多线程程序的并发问题提供了一种新的思路,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。从线程的角度看,目标变量就象是线程的本地变量,(具有线程封闭性),这也是原创 2016-05-28 19:40:01 · 684 阅读 · 0 评论 -
深入学习java并发编程:内存模型(五)锁
锁的释放-获取建立的happens before 关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放-获取的示例代码:class MonitorExample { int a = 0; public synchronized void writer() { //1 a+转载 2016-06-10 20:08:29 · 1342 阅读 · 0 评论