Java并发学习记录
文章平均质量分 75
SmuEdward
这个作者很懒,什么都没留下…
展开
-
Java线程的终止——interrupt
取消/关闭的场景我们知道,通过线程的start方法启动一个线程后,线程开始执行run方法,run方法运行结束后线程退出,那为什么还需要结束一个线程呢?有多种情况,比如说: 很多线程的运行模式是死循环,比如在生产者/消费者模式中,消费者主体就是一个死循环,它不停的从队列中接受任务,执行任务,在停止程序时,我们需要一种”优雅”的方法以关闭该线程。 在一些图形用户界面程序中,线程是用户启动的,完成一些转载 2017-02-08 10:52:05 · 4892 阅读 · 0 评论 -
java并发编程——Future实现“任务的提交”与 "任务的执行"相分离
本文转自老马编程Java并发包提供了一套框架,大大简化了执行异步任务所需的开发,本节我们就来初步探讨这套框架。在之前的介绍中,线程Thread既表示要执行的任务,又表示执行的机制,而这套框架引入了一个”执行服务”的概念,它将”任务的提交”和”任务的执行”相分离,”执行服务”封装了任务执行的细节,对于任务提交者而言,它可以关注于任务本身,如提交任务、获取结果、取消任务,而不需要关注任务执行的细节,如线转载 2017-03-03 11:29:40 · 1798 阅读 · 0 评论 -
解析Concurrent包下的ReentrantLock、LockSupport、AQS
本文转自老马编程,微信公众号:laoma_shuoJava并发包中的显式锁接口和类位于包java.util.concurrent.locks下,主要接口和类有: 锁接口Lock,主要实现类是ReentrantLock 读写锁接口ReadWriteLock,主要实现类是ReentrantReadWriteLock本节主要介绍接口Lock和实现类ReentrantLock,关于读写锁,我们后续章节介转载 2017-02-14 11:22:43 · 1028 阅读 · 0 评论 -
volatile实现原理——基于硬件的角度
引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分转载 2017-02-22 10:32:29 · 728 阅读 · 0 评论 -
java并发容器之ConcurrentHashMap
ConcurrentHashMap的锁分段技术 HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先原创 2017-02-21 14:27:36 · 454 阅读 · 0 评论 -
java中的并发容器之CopyOnWriteArrayList
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。C转载 2017-02-20 10:48:39 · 438 阅读 · 0 评论 -
synchronized——可重入性
一、synchronized的可重入性在java内部,同一线程在调用自己类中其他synchronized方法/块或调用父类的synchronized方法/块都不会阻碍该线程的执行,就是说同一线程对同一个对象锁是可重入的,而且同一个线程可以获取同一把锁多次,也就是可以多次重入。 因为java线程是基于“每线程(per-thread)”,而不是基于“每调用(per-invocation)”的(java中原创 2017-01-20 10:56:26 · 913 阅读 · 0 评论 -
如何正确使用volatile变量
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。锁提供了两种主要特性:互斥(原创 2017-01-17 17:30:25 · 1640 阅读 · 0 评论 -
BlockingQueue的原理浅析及其在项目中的应用
(一)BlockingQueue的原理1. 什么是BlockingQueue? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而原创 2017-01-16 16:02:53 · 5129 阅读 · 0 评论 -
java并发容器——延迟队列DelayQueue
延时阻塞队列DelayQueue是一种特殊的优先级队列,它也是无界的,它要求每个元素都实现Delayed接口,该接口的声明为:public interface Delayed extends Comparable { long getDelay(TimeUnit unit);}Delayed扩展了Comparable接口,也就是说,DelayQueue原创 2017-02-27 15:31:28 · 2004 阅读 · 0 评论