悲观锁与乐观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。

转自:http://blog.csdn.net/hongchangfirst/article/details/26004335

看了很多,发现这个总结,太贴切。不知道怎么加自己观点了,只能实际运用加观点了。这里直接转载~

注解是什么,如何使用注解,为什么使用注解

注解是什么

注解,可以看作是对 一个 类/方法 的一个扩展的模版,每个 类/方法 按照注解类中的规则,来为 类/方法 注解不同的参数,在用到的地方可以得到不同的 类/方法 中注解的各种参数与值。

怎么使用注解

1、自定义注解类

注解类上方的注解各种含义,看这个链接http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html

2、枚举类

3、注解使用

通过注解获取到了具体的配置信息,并且打印,那么注解的功能就说完了

以上演示的是类型注解,方法注解则修改注解类中

@Target(ElementType.TYPE)  ===> @Target(ElementType.METHOD)   按照以下方法调用即可

为什么用注解

优点

配置文件

1,集中管理对象和对象之间的组合关系,易于阅读

注解

1,开发速度快

2,编译期间容易发现错误的出处

缺点

配置文件

1,开发速度相对较慢;

2,编译时很难检查出错误,运行中的错误很难定位,调试难度较大。

注解

管理分散,基本每个类上都有;


一个小特性

注解有类似继承这样的机制,A.java 实现了spring的@Component可以被注入到spring容器,但如果自定义的注解有spring的@Component注解的话,那么在具体使用这个自定义注解时候将不需要原本使用的spring注解,具体事例如下:

这是原本应该有的注解形式,一个自定义注解以及一个spring的注解

如果自定义注解 拥有spring的@component注解

那么在具体使用时,可以忽略之前的注解

以上观点为自我理解的结果,如有错误,请指正!~