mysql java 解决幻读_高效java一级Mysql幻读

1.常量接口不应该被效仿

在接口中定义常量可以使得实现类中很方便的使用这些常量,但是这是不规范的

首先接口是面向api的,实现一个常量接口会导致实现细节泄露到类的到处api中

其次,如果一个非final类实现了常量接口,那么它的所有子类的命名空间都会被接口中

的常量污染

2.谨慎使用接口默认方法

比如Colleciton中后期增加了removeif这个方法,并提供了默认实现,但是某些同步实现类中

并不能感知到这种改变,那么在使用同步类中的removeif方法时就会暴露问题。

3.非静态内部类会持有外部类的引用,所以如果内部类没有被回收,外部类也不会被回收

尽量使用静态内部类

4.httpclient连接池设置首先tcp设置可以重用wait_time状态的端口,这个参数是net.ipv4.tcp_tw_reuse=1(默认为0)

timewait状态是在客户端主动断开连接后,但是他不相信客户端已断开,所以会发送试探报文,一般会发送两次,

所以timewait状态的时间一般是两个MSL时间(最大报文段生存时间),linux下MSL一般为60s

5.mysql的可重复读解决了幻读问题吗?

1我们执行事务1 ,select * from user -> 查询出1条结果

2执行事务2,insert into user values(...) 并提交

3继续事务1 ,select * from user 发现还是只有1条结果

貌似mysql的mvcc解决了幻读问题,但是如果我们在事务1的第二步执行set操作,会发现事务1 吧事务2 插入的那一条数据

也修改了,就说明可重复度只解决了读的幻读问题,对于修改的幻读问题还是存在的,那么这种情况下可以通过两种方式

解决:1修改为序列执行事务2通过间隙锁来解决,也就是在事务1 的select操作中,将事务2插入的数据包含在事务1的查询中

通过id > 1这种方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值