文章列表
相信单例模式大家已经不陌生, 是比较常见的几种模式之一,在spring中默认的bean都是单例. 下面对该模式做下回顾与总结. 主要分为饿汉式和懒汉式, 饿汉式是在类加载时进行初始化, 懒汉式是延迟加载, 当第一次调用时,进行初始化. 单例模式需要注意的是: 1. 要有私有构造方法, 避免外部直接实例化. 2. 要有静态的getInstance()方法.
3. 对于懒汉式, 要在getInstance()方法前加上同步, 避免多线程环境下出现并发问题.单例模式基本传统实现:
//饿汉式
public class Singleton {
//将构造函数私有化 ...
悲观锁: 指在应用程序中显示地为数据资源加锁. 悲观锁假定当前事务操纵数据资源时, 肯定还会有其他事务同时访问该数据资源, 为了避免当前事务的操作受到干扰, 先锁定资源. 尽管悲观锁能够防止丢失更新和不可重复读这类并发问题, 但是它会影响并发性能, 因此应该谨慎使用悲观锁.
乐观锁: 乐观锁假定当前事务操纵数据资源时, 不会有其他事务同时访问该数据资源, 因此完全依靠数据库的隔离级来自动管理锁的工作. 应用程序采用版本控制手段来避免可能出现并发问题.
悲观锁有两种实现方式:
一: 在应用程序中显示指定采用数据库系统的独占锁来锁定数据资源.
二: 在数据库表中增加一个表明记录状 ...
Session 缓存概述 Session级别的缓存是Hibernate的一级缓存,主要提供事务级别的缓存处理,用来提高访问数据库的性能等. 在Session的接口实现中包含一系列的java集合,这些集合构成了Session的缓存. 只要Session实例没有结束生命周期,存放在它缓存中的对象也不会结束生命周期. 当Session 通过save()方法持久化一个对象时,这个对象被加入到Session缓存中去, 这以后,只要缓存没有被清空,这个对象就被存储在Session的集合对象中,即存在于缓存之中. 当Session 通过get()方法试图从数据库中得到一个对象时, Session会先判断这个对 ...
AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。
来看AtomicInteger提供的接口。
//获取当前的值
public final int get()
//取当前的值,并设置新的值
public final int getAndSet(int newValue)
//获取当前的值,并自增
public final int getAndIncrement()
//获取当前的值,并自减
public final int getAndDecr ...
在分布式的系统中,通常会有多个线程连接到数据库中同时对一个表进行操作(这里的同时并不表示同一个时间点,而是同时竞争cpu的资源,至于如何调度,就要看线程和操作系统如何进行调度了),这种情况下如果会话的事物设置不当,就会导致数据混乱,常常会出现以下三种情况(假设现在系统中有两个会话A和B,同时对表T_Test操作):
1.脏读:假如A开启事物后,在查询之前,B修改了表中的某条记录,但是事物还没提交,这个时候A再读取该表时,读到了B修改之后的数据,问题发生了:B如果此时回滚了事物,那么A读到的就是错误的数据了。
2.不可重复读:假如A开启事物后,对表做了查询后,此时B修改了表中的某条记录,然后A又做 ...