>>可变状态是至关重要的。 所有的并发问题都可以归结为如何协调并发状态的访问。可变状态越少,就越容易确保线程的安全性。 >>尽量将域声明成final类型,除非需要它们是可变的。 >>不可变对象一定是线程安全的。 不可变对象能极大地降低并发编程的复杂性,它们更为简单而且安全,可以任意共享而无需使用加锁 ...
分类:
其他好文 时间:
2016-08-06 20:23:19
阅读次数:
124
线程安全:一般来说,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或..
分类:
编程语言 时间:
2016-08-03 06:49:21
阅读次数:
294
解决Socket沾包问题——C#代码 前天晚上,曾经的一个同事问我socket发送消息如果太频繁接收方就会有消息重叠,因为当时在外面,没有多加思考 第一反应还以为是多线程导致的数据不同步导致的,让他加个线程锁搞定。后来回到家慢慢思考感觉这个和加锁没啥关系,如果是多线程导致的,消息只会被覆盖呀。后来就 ...
单例模式 Singleton (创建型模式) 1.定义 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2.结构图 3.代码 懒汉式 双重锁形式 synchronized对整个方法加锁是没必要的,只要保证实例化对象的那段代码不被多线程同时访问就行了,当两个线程同时访问这个方法时,假设 ...
分类:
其他好文 时间:
2016-08-02 00:59:51
阅读次数:
169
一、同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的便是Concurrent ...
分类:
其他好文 时间:
2016-08-02 00:46:17
阅读次数:
264
最近在工作上碰见了一些高并发的场景需要加锁来保证业务逻辑的正确性,并且要求加锁后性能不能受到太大的影响。初步的想法是通过数据的时间戳,id等关键字来加锁,从而保证不同类型数据处理的并发性。而java自身api提供的锁粒度太大,很难同时满足这些需求,于是自己动手写了几个简单的扩展… 1. 分段锁 借鉴 ...
分类:
编程语言 时间:
2016-07-28 14:57:17
阅读次数:
226
1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁 ...
分类:
编程语言 时间:
2016-07-24 18:02:45
阅读次数:
179
共享锁【S锁】又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。共享锁是造成上锁对象必须被大家共享,它排斥 排他锁,因此别的会话不能独占资源对其修改 ...
分类:
其他好文 时间:
2016-07-23 16:37:03
阅读次数:
137
with(nolock)并意味着没有锁,实际上在查询一张表时,还是有锁,会对对象增加架构锁, 防止表会修改,会对数据库增加共享锁。若使用drop index,则要等到架构锁释放。 sql server2005提供了快照隔离和读取已提交快照这两种新的不加锁、无阻塞的事务隔离级别,可使用 快照:每次从数 ...
分类:
其他好文 时间:
2016-07-23 14:59:08
阅读次数:
287