数据的同步方法

本文探讨了在多线程环境下对同一份数据进行操作时的同步方法,包括使用synchronized关键字、ReentrantLock、AtomicInteger及乐观锁等手段。此外,还介绍了多个数据库之间如何实现数据同步的具体方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        第一种情况:多个线程对同一份数据操作。

                  同步方法:

                    a) 将对数据的操作加上synchronize

                    b) 用ReentrantLock,使用ReentrantLock的好处:1、可以用tryLock(time),指定获取锁的时间上限,如果指点时间内都没有获得锁,则可以释放当前线程获得的互斥资源,避免死锁。2、可以在构造ReentrantLock时设置为公平锁,即优先将锁给等待时间最长的线程。不设置时,默认为不公平锁。synchronize也是不公平锁。

                    c)用AtomicInteger等原子类,使用compareAndSet方法实现数据的同步

                    d)使用乐观锁,将数据放在数据库中,并加一个version版本。每次对数据更新时,同时判断version是否和读取数据时的相同。update  table set data=data1,version=verison+1 where id=xx and version=yy。如果version不同,说明在当前线程读出数据之后,有另外的线程将数据改变了,此时再做其他处理。

        第二种情况:多个数据库间维护同一数据的同步

                    如MySQL的Master和slaver之间的数据实时同步,是通过binary log实现。master将对数据的更新操作都写到binary log,slaver再将binary log复制到自己的relay log中进行重放,从而实现同步。

    具体请参见:大型分布式网站架构设计与实践  4.3.3高并发系统设计  5.4.2实时数据同步

转载于:https://my.oschina.net/henryking/blog/1499704

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值