1、并发的特性
- 可见性: 当一个线程修改了共享变量的值,其他线程会马上知道这个修改。当其他线程要读取这个变量的时候,最终会去内存中读取,而不是从缓存中读取。
- 原子性: 即一个操作或者多个操作,要么全部执行并且不被打断,要么就都不执行
- 有序性: 虚拟机在进行代码编译时,对于那些改变顺序之后不会对最终结果造成影响的代码,虚拟机不一定会按照我们写的代码的顺序来执行,有可能将他们重排序。实际上,对于有些代码进行重排序之后,虽然对变量的值没有造成影响,但有可能会出现线程安全问题。
2、AQS
- AbstractQueuedSynchronizer,抽象队列同步器
- 有两个变量,一个是state,一个是记录当前的线程
- state决定是否被占用,被重入多少次
- 不同线程访问,会被放在等待队列里面,等state为0可以访问
3、注解失效
一个类的方法A,B,A调用B,B的注解会失效。
这个是因为Spring的注解基本上都是aop实现的,针对所有的Spring AOP注解,Spring在扫描bean的时候如果发现有此类注解,那么会动态构造一个代理对象。在A中调用B,这个时候只会代理A,B没有生成代理,所以A调用失败
使用((X)AopContext.currentProxy()).B()可以解决