Java高并发程序设计
AaronSimon
这个作者很懒,什么都没留下…
展开
-
Java并行程序基础知识
一、线程简介进程:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体,在当代面向线程设计的计算机结构中,进程是线程的容器,程序是指令、数据及其组织形式的描述,进程是程序的实体;线程是轻量级进程,是程序的最小执行单位,使用多线程进行并发程序的设计,是因为线程间的切换和调度的成...原创 2018-09-16 08:16:15 · 356 阅读 · 0 评论 -
JDK并发包—多线程的团队协作:同步控制
在Java并行程序基础知识一文中我们提到使用syschronized关键字做同步控制来决定一个线程是否可以访问临界区资源,同时使用线程等待Object.wait(),线程通知Object.notify()做多线程间的协作。这一节我们主要学习syschronized,Object.wait(),Object.notify()的增强版——重入锁。1.1 syschronized的功能扩展:重入...原创 2018-09-16 08:16:34 · 249 阅读 · 0 评论 -
JDK并发包-JDK并发容器
除了同步控制,线程池等基本工具以外,JDK还准备了一大批好用的容器类。1.1 并发集合JDK提供的这些容器大部分在java.util.concurrent包中。ConcurrentHashMap:这是一个高效的并发HasshMap,可以理解为一个线程安全的HashMapCopyOnWriteArrayList:这是一个List,在读多写少的场合,这个List的性能非常好,远远好...原创 2018-09-16 08:16:48 · 447 阅读 · 0 评论 -
锁的优化及注意事项(一)
一、提高锁性能的几点建议锁的竞争会导致程序整体性能的下降,如何降低锁竞争带来的副作用是我们必须考虑的。下面提出几点锁优化的建议:1.1 减小锁持有时间单个线程对锁的持有时间与系统的性能密切相关。如果线程持有锁的时间越长,那么锁的竞争程度就会越激烈。因此,应尽可能减少线程对某个锁的占有时间,进而减少线程间互斥的可能。看下面这段代码:public synchronized vo...原创 2018-09-16 08:17:01 · 540 阅读 · 0 评论 -
锁的优化及注意事项(二)
一、无锁对于并发控制而言,锁是一种悲观的策略,总是假设每一次进入临界区操作都会产生冲突,如果多线程访问临界区资源,就宁可牺牲性能让线程等待,所以锁会阻塞线程执行。而无锁是一种乐观策略,它会假设对临界区资源的访问是没有冲突的,所有线程都会不停顿的执行,但是如果遇到冲突那该怎么办?无锁策略使用一种叫做比较交换的技术(CAS Compare And Swap)来鉴定线程冲突,一旦检测到冲突,就进行重...原创 2018-09-16 08:17:13 · 232 阅读 · 0 评论 -
并行模式与算法(一)
一、高性能生产者-消费者:无锁实现BlockigQueue使用锁和阻塞等待来实现线程间的同步,而ConcureentLinkedQueue使用大量的无锁CAS操作,相比BlockigQueue的性能要好的多。但是使用CAS进行编程是非常困难的,不过现成的Disruptor框架帮我们实现了这一功能。1.1 无锁的缓冲框架:DisruptorDisruptor框架是由LMAX公司开发的...原创 2018-09-16 08:17:33 · 1172 阅读 · 2 评论 -
并行模式与算法(二)
1.矩阵算法在矩阵乘法中,第一个矩阵的列数和第二个矩阵的行数必须是相同的。如果需要进行并行计算,一种简单的策略是可以将A矩阵进行水平分割,得到子矩阵A1和A2,B矩阵进行垂直分割,得到子矩阵B1和B2。此时,我们只要分别计算这些子矩阵的乘积,将结果进行拼接,就能得到原始矩阵A和B的乘积。当然这个过程是可额予以反复进行的。为了计算A1*A2,我们可以进一步将A1和B1进行分解,直到我们认为子矩阵的...原创 2018-09-27 17:59:59 · 692 阅读 · 1 评论 -
JDK并发包-线程复用:线程池
为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用。线程池中,总有那么几个活跃线程。当你需要使用线程时,可以从池子中随便拿一个空闲线程,当完成工作时,并不急着关闭线程,而是将整个线程退回到池子,方便其他人使用。1.1 JDK对线程池的支持JDK提供一套Executor框架,帮助开发人员更好的有效的控制多线程。其中ThreadPoolExecutor表示一个线程池。Executor...原创 2018-09-27 18:13:45 · 210 阅读 · 0 评论 -
Java 8 与并发(二)
一、并行流与并行排序Java 8中可以在接口不变的情况下,将流改为并行流,方便在多线程中进行集合中的数据处理。1.1 使用并行流过滤数据下面示例统计1~1000000内所有质数的数量。下面是一个判断质数的函数:public class PrimeUtil { public static boolean isPrime(int number) { int tmp = ...原创 2018-09-27 23:09:18 · 347 阅读 · 0 评论