- 浏览: 919166 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (498)
- J2EE (52)
- 数据库 (17)
- java基础 (43)
- web技术 (19)
- 程序设计 (6)
- 操作系统 (18)
- IT资讯 (7)
- 我的IT生活 (12)
- 学习笔记 (9)
- Jquery (25)
- JavaScript (18)
- spring (40)
- Hibernate (12)
- Struts (10)
- YUI (2)
- Extjs (22)
- .net (0)
- Eclipse (10)
- 社会主义 (2)
- 服务器 (9)
- CSS (8)
- 网络安全 (16)
- 版本控制 (9)
- PHP (2)
- Oracle (42)
- SQL server (1)
- Mysql (11)
- 项目管理 (3)
- 开发工具使用 (10)
- SQL语句 (7)
- Perl (0)
- Shell (6)
- 漏洞 (4)
- ibatis (5)
- hacker (2)
- SQL注入 (6)
- Hacker工具 (2)
- 入侵和渗透 (7)
- 插件/组件 (2)
- 最爱开源 (5)
- 常用软件 (2)
- DOS (1)
- HTML (2)
- Android (9)
- CMS (1)
- portal (8)
- Linux (7)
- OSGI (1)
- Mina (5)
- maven (2)
- hadoop (7)
- twitter storm (2)
- sap hana (0)
- OAuth (0)
- RESTful (1)
- Nginx (4)
- flex (1)
- Dubbo (1)
- redis (1)
- springMVC (1)
- node.js (1)
- solr (2)
- Flume (1)
- MongoDB (2)
- ElasticSearch (1)
最新评论
-
M_drm:
请问要怎么设置浏览器才不报没权限呢?
用JS在页面调用本地可执行文件的方法(ACTIVEX) -
Alexniver:
官方文档。When importing data into I ...
mysql导入数据过慢 解决方法 -
camelwoo:
我记得 Criteria 可以做连接查询与子查询,也可以做分页 ...
Hibernate总结篇二 -
zhenglongfei:
楼主如果SubKeyName 这个节点不存在,怎么办??怎么用 ...
Java操作注册表 -
yxx676229549:
用log4j 2 了
logback
离线并发的来源
在Web项目中,离线并发显得尤其严重。例如,用户A和用户B同时修改数据库中的某张表的R行,加入R行有两个字段分别是C1,C2。
假如按照如下过程修改:
1 用户A将数据R(C1,C2)读取到A的浏览器中。
2 用户B将数据R(C1,C2)读取到B的浏览器中。
3 用户A在浏览器上将数据修改为R(C1’,C2),同时更新到数据库。
4 用户B在浏览器上将数据修改为R(C1,C2’),同时更新到数据库。
上述过程存在两个问题,第一,第4步B在修改数据的时候数据库中的数据和B的浏览器中数据已经不一致了;第二,如果程序按照哪个字段变化在数据库中更新哪个字段的方式处理的话,那么经过上述四步修改,数据库中R行的内容是(C1’,C2’),这和A或者B的想法都不同(A认为是(C1’,C2),B认为是(C1,C2’))。
上述过程中A对数据库的修改过程或者B对数据库的修改过程,都是无法根据数据库的最新内容做修改,所以成为离线。A和B同时对记录R进行就该叫离线。
以上的环境叫离线并发。
那么如何解决离线并发过程中遇到的问题呢?我们引入锁机制。
锁机制
锁机制,就是在需要修改的数据上加互斥锁,通过互斥锁避免数据被同时修改。锁机制更具其应用环境又分为乐观锁和悲观锁
乐观锁
乐观锁,指认为冲突很少发生,所以只是在数据修改的时候比较修改的基础数据和数据库中的数据是否相同,相同则修改,否则提示用户重新装入数据库中已经变化的数据。
实现方法1:在进行update的时候使用where条件,在Where标间中比较所有上一步中查询得到的数据。如果数据库中的数据没有变化,则update可以更新到内容,否则update语句不能更新到内容,可以根据update的返回值确定更新是否成功。
实现方法2:在每一个表中追加一个特殊字段,类型为timestamp,每次更新的时候比较这个字段的值是否一致,如果一致,则更新,同时将这个字段更新为当前时间,否则,说明数据已经变更。这也可以使用update加上where实现。
悲观锁
悲观锁指,需要修改的数据,在读取的时候就对数据加锁,其他用户在准备修改,读取数据的阶段判断数据是否上锁,以此来决定是否进行修改前的读操作。
实现方法:
通常在数据库中建立一张lock表,该表的字段包括,表明,唯一索引,时间,用户信息等。
在用户读取数据准备修改的时候,首先判断lock表中是否存在自己将要读取的数据。
如果不存在,则在lock表中添加一条记录,记录对那张表的哪行数据进行修改;如果存在,在判断时间字段是否超时。
如果超时,则更新lock表中本条记录的时间字段。(防止死锁的必要手段)
如果存在,也不超时,说明本条记录正在被其他用户修改,则返回并发信息。
发表评论
-
List对象排序通用方法
2014-07-29 09:21 1033在数据库中查出来的列 ... -
EJBCA环境搭建
2014-04-03 17:31 1092EJBCA开发者 http://wiki.ejbca.org/ ... -
Java & Eclipse 相关内容杂记及技巧
2013-11-26 22:42 10571、Eclipse 的启动画面 A、加启动参数。如: ... -
一套貌似很牛B的Nutch相关框架视频教程
2013-10-24 09:16 1107国内首套免费的《Nutch相关框架视频教程》(1-20) ht ... -
memcached实现多个tomcat 共享一个session(转)
2013-04-23 09:49 900http://dqm926.iteye.com/blog/18 ... -
logback
2013-01-23 09:40 1288http://yuri-liuyu.iteye.com/blo ... -
位运算
2012-11-21 17:50 957程序中的所有数在计算 ... -
HashMap的2中遍历方式比较
2012-11-20 11:47 1015http://smallnetvisitor.iteye.co ... -
SVN如何强制在提交时要求添加注释说明(windows平台)
2012-11-06 18:00 3624在项目库的hooks目录下,添加一个pre-commit.ba ... -
Java虚拟机读写其他进程的数据
2012-08-22 13:07 1143Java虚拟机读写其他进程的数据 http://axiang ... -
java计算校验和:对“消息头+会话头+事务头+操作信息”按32位异或,对异或结果取反后的值为校验和。
2012-08-14 17:41 3544java计算校验和:对“消 ... -
java中对Byte字符数组定长截取的方法
2012-08-14 16:33 2110今天在在处理从网络上接收到的字符串,因为是从后台C语言过来的一 ... -
CAS单点登录配置笔记
2012-08-14 16:31 1098转:http://blog.csdn.net/lifvc/ar ... -
hadoop安装与配置
2012-08-10 11:46 1351一、安装准备 1、下载hadoop 0.21.0,地址:ht ... -
集中各种好网站
2012-08-09 16:41 9721.开源中国---在线工具: http://www.oscto ... -
人脸检测算法库 jViolajones 使用示例代码
2012-08-09 16:32 1691jViolajones是人脸检测算法Viola-Jones的一 ... -
JQuery上传插件Uploadify详解及其中文按钮解决方案
2012-08-08 18:02 0官网: http://www.uploadify.com/do ... -
用java流方式判断文件类型
2012-08-08 17:57 0全文转载:http://rainsilence.iteye.c ... -
Java简单的网络爬虫实现
2012-08-08 10:19 2510最近在学习搜索方面的东西,需要了解网络爬虫方面的知识,虽然有很 ... -
java网络编程之TCP/IP ——SocketServer与Socket
2012-08-08 10:20 2273java网络编程主要包含4部分: (注意设置超时时间) 1. ...
相关推荐
在分布式系统中,事务处理是确保数据一致性与正确性的关键环节。当涉及到多个数据库操作时,分布式事务就显得尤为重要。...在实际应用中,结合使用数据库管理和开发工具,可以更有效地实施和维护这样的锁机制。
在分布式环境中,为了确保并发操作的安全性,锁机制是必不可少的。Redis作为一个内存数据库,提供了高效的数据操作,常被用作分布式锁的实现基础。可重入分布式锁允许一个线程多次获取同一锁,防止死锁,并且能确保...
4. **中断服务程序**:处理中断,可能需要与FreeRTOS内核的同步机制配合。 5. **硬件抽象层**:封装硬件接口,使FreeRTOS API能调用底层驱动,如定时器、串口等。 FreeRTOS的灵活性和可扩展性使得它广泛应用于各种...
6. **数据一致性**:确保服务器端和客户端数据的一致性,可能需要使用乐观锁或悲观锁等并发控制策略。 通过以上组件和策略的组合,离线数据存储和上传方案可以为各种应用提供可靠的数据管理,无论是在移动设备还是...
- 锁机制:防止多个用户同时修改同一数据,如共享锁(读锁)、排他锁(写锁)。 - 多版本并发控制(MVCC):允许多个版本并存,避免阻塞其他读写操作。 - 死锁检测与解除:检测和解决两个或更多事务无法继续进行...
除此之外,Java的并发工具包java.util.concurrent提供了大量方便的类和接口,如ExecutorService用于线程池管理,BlockingQueue用于线程间协作,以及锁机制(如ReentrantLock和读写锁)等。 多线程的优势主要体现在...
- **信号量(Semaphore)**:用于保护共享资源,允许有限数量的并发访问。 - **互斥锁(Mutex)**:确保同一时间只有一个任务访问共享资源。 - **事件标志组(Event Flags)**:用于多个事件之间的通信,任务可以...
2. **改进的锁机制**:引入了`java.util.concurrent.locks`包,提供了可中断的锁、读写锁等高级同步机制。 四、XML支持 Java 5增强了对XML的支持,包括SAX和DOM解析器的性能提升,以及JAXB(Java Architecture for ...
#### 一、离线缓存架构与设计 **1.1 分布式架构与分区管理** - **分布式架构**:高性能离线缓存存储引擎通常采用分布式架构,将整个缓存划分为多个分区,每个分区由一组独立的服务器进行管理。这种设计能够有效...
乐观离线锁与悲观离线锁 对于跨事务的访问控制,可以采用乐观离线锁或悲观离线锁。这两种策略类似于单个事务内的乐观锁和悲观锁,但应用于不同事务之间的交互。 - **乐观离线锁**:通过版本字段或其他机制检测...
5. **并发编程**:多线程、锁和并发控制在任务调度和执行过程中至关重要。 6. **持续集成/持续部署(CI/CD)**:学习如何设置Jenkins或GitLab CI等工具,自动化构建和测试流程。 7. **日志与监控**:如使用ELK Stack...
9. **容错与恢复**:引入熔断、降级和重试等机制,例如Hystrix,以增强系统的容错性。同时,数据备份和恢复策略也是保障服务连续性的必要手段。 10. **持续集成与自动化测试**:通过Jenkins等工具实现持续集成,...
- **容灾备份**:包括离线与在线数据同步、全量与增量备份、热备与冷备等多种策略,确保数据的安全性和服务的连续性。 - **读写分离**:将读取操作和写入操作分开处理,减轻数据库的压力,提高系统的响应速度。 ###...
线程同步机制如互斥锁、条件变量等也是必须了解的内容。 7. **输入/输出流**:C++的I/O库提供了流的概念,使得数据的输入输出操作变得简洁且易于理解,例如iostream库中的cin、cout等。 8. **C++标准库**:除了...
这个作业的核心是生产者与消费者问题,这是并发编程中的一个经典模型。 生产者与消费者问题是多线程编程中的一种典型应用场景,涉及到了进程同步和互斥的概念。在该问题中,一组生产者进程负责生成数据并放入一个...
在实际应用中,你可能还需要关注多线程的同步问题,如锁机制(Lock)、条件变量(Condition)以及事件对象(Event),以防止数据竞争和死锁,确保程序的正确性。同时,理解线程池的工作原理和调优策略,如合理设置...
如果一个CSR在另一个更新数据后提交更改,那么就会检测到数据并发性问题,因为数据库记录的状态与DataSet中的状态不符。 数据并发性异常的常见原因是: 1. **脏读**:一个事务读取了另一个事务未提交的修改。 2. *...
- **并发控制与事务**:乐观锁、悲观锁、Latch、mutex、写时复制(Copy-on-Write)和Compare-and-Swap (CAS)等机制用于并发控制,保证共享资源的安全访问。多版本并发控制(MVCC)在数据库中用于事务一致性。 6. *...
9. **多线程与并发**:多线程允许程序同时执行多个任务,而并发则涉及如何在有限的处理器资源下协调这些任务。了解线程同步和互斥机制(如锁、信号量、条件变量)是多线程编程的关键。 10. **网络编程**:操作系统...