
并发编程
飘来荡去、、
这个作者很懒,什么都没留下…
展开
-
Callable和并行设计模式——Future模式
目录一、Callable1.1 介绍1.2 Future常用方法1.3 Demo1.4 Runnable和Callable的区别二、Future模式2.1 介绍2.2 实现2.2.1 公共数据接口2.2.2 RealData2.2.3 FutureData2.2.4 FutureClient2.2.5 调用者2.2.6 结果三、Java内...原创 2018-12-07 21:02:21 · 355 阅读 · 0 评论 -
红黑树
一、BT二叉树,略。二、BST2.1 定义若它的左子树不空,则左子树上的关键字的值均小于根关键字的值。若它的右子树不空,则右子树上的关键字的值均大于根关键字的值。左右子树又各是一棵二叉排序树2.2 查找二叉排序树的查找从根节点开始,沿着某一个分支逐层向下比较。先和根节点比较,大于的话在又子树继续查找,小于的话在左子树查找。2.3 插入在查找过程中,当树中不存在关键字等于给定...原创 2018-12-26 17:10:50 · 2241 阅读 · 3 评论 -
JUC锁——Semaphore
一、什么是SemaphoreSemaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的事情后释放许可信号,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。它的用法如下:...原创 2018-12-20 23:31:28 · 441 阅读 · 0 评论 -
JUC锁——CyclicBarrier
一、什么是CyclicBarrierCyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。 CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 CyclicBarrier初始时还可带一个Runnable的参数...原创 2018-12-20 22:19:30 · 208 阅读 · 0 评论 -
JUC锁——CountDownLatch
一、什么是CountDownLatchCountDownLatch 类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他2个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值...原创 2018-12-20 21:39:19 · 296 阅读 · 0 评论 -
LOCK锁
LOCK锁1. synchronized的缺陷synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢?如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获取锁的线程执行完了该代码块,然后线程...原创 2018-12-07 14:24:35 · 978 阅读 · 0 评论 -
线程池
目录一、什么是线程池二、线程池的作用三、线程池的分类3.1 newCachedThreadPool3.2 newFixedThreadPool3.3 newSingleThreadExecutor3.4 newScheduleThreadPool3.5 newSingleThreadScheduledExecutor四、ThreadPoolExecutor类...原创 2018-12-07 10:52:25 · 226 阅读 · 0 评论 -
伪共享(False Sharing)
目录一、计算机的基本结构二、缓存行三、伪共享四、如何避免伪共享缓存系统中是以缓存行(cache line)为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。一、计算机的基本结构下图是计算的基本结构。L1、L2、L3分别表示一级缓存、二级缓存、三级缓存,越靠近CPU的缓存,速度越快,容量也越小。所以L1缓存很...原创 2018-12-19 23:35:01 · 635 阅读 · 0 评论 -
并发队列
并发队列1.ArrayDeque, (数组双端队列) 2.PriorityQueue, (优先级队列) 3.ConcurrentLinkedQueue, (基于链表的并发队列) 4.DelayQueue, (延期阻塞队列)(阻塞队列实现了BlockingQueue接口) 5.ArrayBlockingQueue, (基于数组的并发阻塞队列) 6.LinkedBlockingQueue...原创 2018-12-06 23:29:49 · 221 阅读 · 0 评论 -
并发框架——Distruptor
目录一、什么是Disruptor二、Disruptor的设计方案三、Disruptor实现特征四、Disruptor实现生产者-消费者模式4.1 依赖4.2 声明Event4.3 创建EventFactory4.4 消费者4.5 生产者4.6 调用五、Disryptor的核心概念5.1 RingBuffer5.1.1 什么是RingBuffer...原创 2018-12-19 17:48:45 · 6898 阅读 · 1 评论 -
Java锁的深入
一、重入锁重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的权限。ReentrantLock 和synchronized 都是 可重入锁。锁可以传递~。主要就是用来避免死锁的,假设一个类中的所有方法都加锁,当方法之间进行调用时,如果锁是不可重入的,那么就永远调用不了其它方法,因为锁没有释放(都用同一把锁)轻量级锁(Lock)重量级锁(synchr...原创 2018-12-13 17:01:50 · 197 阅读 · 0 评论 -
线程安全
目录1. 如何产生线程安全问题?2.线程安全解决方法3.内置锁4.同步代码块 synchronized5.同步方法5.1 静态同步方法5.2 非静态同步方法6.synchronized7.多线程死锁 8.ThreadLocal9.多线程的三大特性9.1 原子性9.2 可见性9.3 有序性10.Java内存模型11. Volatile关...原创 2018-12-03 22:45:45 · 298 阅读 · 0 评论 -
多线程基础
1.线程和进程的区别每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输...原创 2018-12-03 20:46:48 · 173 阅读 · 0 评论 -
线程之间的通讯
一、经典问题:生产者与消费者1.1 共享资源class Res{ public String name; public String sex;}1.2 生产者class InThread extends Thread { private Res res; public InThread(Res res) { this.res = res; }...原创 2018-12-05 23:31:53 · 219 阅读 · 0 评论 -
Comparator的使用和原理
一、Arrays.sort二、TimSort.sort重点在折半插入排序中三、binarySort private static <T> void binarySort(T[] a, int lo, int hi, int start, Comparator<? super ...原创 2019-02-01 18:44:28 · 1341 阅读 · 0 评论