
并发
文章平均质量分 75
Wangqyoho
多思考。
展开
-
Java并发编程:阻塞队列
在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程转载 2016-10-23 20:18:56 · 376 阅读 · 0 评论 -
同步/异步 & 阻塞/非阻塞
一、同步/异步同步/异步, 它们是消息的通知机制。同步:在发出一个功能调用时,在没有得到结果之前,该调用就不返回。异步:当一个异步过程调用发出后,调用者不会立刻得到结果。实际处理这个调用的部件是在调用发出后,通过状态、通知来通知调用者,或通过回调函数处理这个调用。所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。换原创 2017-02-08 20:50:03 · 546 阅读 · 0 评论 -
关于ThreadLocal的理解
当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方法就是不共享数据(虽然有点儿蠢...)。如果仅仅在单线程内访问数据,就不需要同步,这种技术就称作线程封闭(Thread Confinement)。 维持线程封闭性的一种较为规范的方法是使用ThreadLocal,这个类可以使得线程中的某个值与保存值的对象关联起来。ThreadLocal类提供了一系列的方法,这些方法为每个使用该变量原创 2016-10-18 15:27:42 · 453 阅读 · 0 评论 -
Java内存模型以及volatile关键字
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们转载 2016-10-16 14:20:13 · 577 阅读 · 0 评论 -
并发容器——ConcurrentHashMap
HashMap是非线程安全的,Hashtable是线程安全的,但是由于Hashtable是采用synchronized进行同步,相当于所有线程进行读写时都去竞争一把锁,导致效率非常低下。 ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。Concurr原创 2017-02-09 16:14:00 · 350 阅读 · 0 评论 -
并发容器——CopyOnWrite
什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnW原创 2017-02-09 16:22:25 · 457 阅读 · 0 评论 -
线程通信中的CountDownLatch和CycliBarrier
一、CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,原创 2017-02-10 15:32:04 · 1655 阅读 · 0 评论 -
concurrent.locks包中的几种锁的区别
可重入锁(ReentrantLock)可分为好几种,分别对应了不同的用途,先贴上api:lockpublic void lock()获取锁。如果该锁没有被另一个线程保持,则获取该锁并立即返回,将锁的保持计数设置为 1。如果当前线程已经保持该锁,则将保持计数加 1,并且该方法立即返回。如果该锁被另一个线程保持,则出于线程调度的目的,禁用当前线程,并且在获得锁之前,该线程将一原创 2017-03-13 10:39:26 · 902 阅读 · 0 评论 -
基于多线程和本地缓存实现跨域重复调用的高性能
>> 最近工作了,写博客的时间越来越少了,思考的时间越来越少,学习沉淀的时间也越来越少。忙里偷闲,记录一些在平时工作中一些有亮点的小tip,记录一些实用的技能,也多亏平时接触到的有能力有想法的同事~前言对于大体量互联网公司的应用,更多场景下需要考虑性能问题,比如大促稳定性、高并发下HA等等。而且在目前微服务盛行的今天,糟糕的涉及往往会导致链路的高rt和糟糕的性能,进而导致糟糕的...原创 2018-11-01 11:38:02 · 779 阅读 · 0 评论