转(http://www.cnblogs.com/guguli/p/5198894.html) Java对象实例的锁一共有四种状态:无锁,偏向锁,轻量锁和重量锁。原始脱离框架的并发应用大部分都需要手动完成加锁释放,最直接的就是使用synchronized和volatile关键字对某个对象或者代码块加 ...
分类:
编程语言 时间:
2016-09-30 18:46:52
阅读次数:
208
锁优化分为代码层面的优化和jvm层面的优化 1. 代码层面的锁优化的思路和方法 一旦用到锁,就说明这是阻塞式的,所以在并发度上一般来说都会比无锁的情况低一点。 这里提到的锁优化,是指在阻塞式的情况下,如何让性能不要变得太差。但是再怎么优化,一般来说性能都会比无锁的情况差一点。 ReentrantLo ...
分类:
其他好文 时间:
2016-09-10 11:33:09
阅读次数:
264
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。 一、ConcurrentLinkedQueue 是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状 ...
分类:
其他好文 时间:
2016-08-07 06:13:47
阅读次数:
186
1、生产者消费者问题三种关系:生产者--生产者(互斥);消费者-消费者(互斥);生产者--消费者(互斥同步)两个角色:生产者;消费者一种生产场所:缓冲区2、环形队列(缓冲区)数据结构:可以有多种,这里选用数组,逻辑上将a[0]和a[size-1]相连构成环形队列判断空/判断满:..
分类:
其他好文 时间:
2016-07-20 19:49:13
阅读次数:
309
本文是无锁同步系列文章的第一篇,主要探讨C++11中的Atomic。 我们知道在C++11中引入了mutex和方便优雅的lock_guard。但是有时候我们想要的是性能更高的无锁实现,下面我们来讨论C++11中新增的原子操作类Atomic,我们可以利用它巧妙地实现无锁同步。 ...
分类:
编程语言 时间:
2016-07-20 06:27:51
阅读次数:
283
1、核心原理是分段加锁 2、Map->Sergent[](使用的是ReentrantLock的非公平模式)->HashEntry[] 3、get操作使用volatile进行了无锁化设计,需要分析下为什么? 4、put操作是串行的,加锁了。 5、分析下hash算法 ...
分类:
其他好文 时间:
2016-07-03 17:23:24
阅读次数:
109
1,java内存模型(JMM):主内存与工作内存:主内存存储了所有变量,每条线程有自己的工作内存,工作内存保存在被线程使用的变量和主内存变量的副本,线程操作必须在工作内存中进行,不能直接读取主内存而线程间的值传递需要主内存。
,内存操作有8条语句均是原子的。
2,线程同步的方法(多个线程对共享数据的竞争是线程不安全的因素)
线程同步总体可分为有锁同步和无锁同步。有锁同步就是加锁,主要包括sy...
分类:
其他好文 时间:
2016-06-12 02:07:58
阅读次数:
354
很多的同学很少使用、或者干脆不了解不可变类(Immutable Class)。直观上很容易认为Immutable类效率不高,或者难以理解他的使用场景。其实不可变类是非常有用的,可以提高并行编程的效率和优化设计。让我们跳过一些宽泛的介绍,从一个常见的并行编程场景说起: 假设系统需要实时地处理大量的订单... ...
分类:
其他好文 时间:
2016-06-11 17:26:22
阅读次数:
169
非阻塞型同步 (Non-blocking Synchronization) 简介
如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步。同步可分为阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization)。
阻塞型同步是指当一个线程到达临界区时,因另外一个线程已经持有访问该共享数据...
分类:
系统相关 时间:
2016-05-27 12:36:27
阅读次数:
266
令牌桶算法 令牌桶算法一般用做频率限制、流量限制等,可能具体有单速双色、单速三色、双速三色等方法。 我们的具体需求是对API的调用的频率做限制,因此实现的是单速双色。 测试结果: 现在的实现是需要锁来保证多线程安全,不知道有没有一种无锁的实现,有待研究 ...
分类:
其他好文 时间:
2016-05-22 13:52:19
阅读次数:
266