以下代码个别情况下会出错 导致值为1 出错的原因 下面是加硬件锁代码 ...
分类:
其他好文 时间:
2017-06-25 10:13:32
阅读次数:
148
Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官 ...
分类:
编程语言 时间:
2017-06-23 21:59:54
阅读次数:
267
一、事务有四个特性:ACID 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数 ...
分类:
编程语言 时间:
2017-06-23 12:52:44
阅读次数:
191
一、事务的四个特性(ACID)原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分..
分类:
数据库 时间:
2017-06-22 12:05:10
阅读次数:
200
Redis是一款开源,高性能键-值存储(key-value store).它的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes),列表(lists),集合(sets)等数据类型.对于这些数据类型,可以执行原子操作.例如:对字符串进行附加操作(append);递增哈希中的值;向 ...
分类:
其他好文 时间:
2017-06-20 23:29:16
阅读次数:
239
19.实现线程同步的方式,以及区别 为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。 同步的方式 1 ...
分类:
编程语言 时间:
2017-06-19 22:14:46
阅读次数:
205
一、事务 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。 事务是一个单独的隔离操 ...
分类:
其他好文 时间:
2017-06-15 12:37:11
阅读次数:
130
原子操作 原子操作,顾名思义,就是说像原子一样不可再细分不可被中途打断。一个操作是原子操作,意思就是说这个操作是以原子的方式被执行,要一口气执行完,执行过程不能够被OS的其他行为打断,是一个整体的过程,在其执行过程中,OS的其它行为是插不进来的。在linux中提供了两种形式的原子操作: 一种是对整数 ...
分类:
系统相关 时间:
2017-06-09 12:37:19
阅读次数:
267
原子性 原子性:原子操作是不能被线程调度机制中断的操作,一旦操作开始,那么它就一定可以在可能发生的“上下文切换”之前(切换到其他线程执行)执行完毕。 依赖原子性是很棘手且很危险的,除非你是并发专家,否则不建议使用原子性来代替同步。 原子性应用于除long和double之外的所有基本类型之上的“简单操 ...
分类:
编程语言 时间:
2017-06-09 00:51:16
阅读次数:
233
part1 从AtomicInteger開始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包。而Queue。非常多情况下使用到了Atomic操作。因此首先从这里開始)。非常多情况下我们仅仅是须要一个简单的、高效的、线程安全的递增递减方案。注意,这里有三 ...
分类:
编程语言 时间:
2017-06-07 14:20:16
阅读次数:
191