- volatile类型: 根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。 每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。所以,同一变量的值在工作内存和主存中可能不一致。volatile其实是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我。
- synchronized关键字是悲观锁 也叫独占锁。所谓悲观锁就是某一线程独占资源,其他线程只能干等着,这种锁在高并发中性能很差(还有一种实现锁的方式是乐观锁
乐观锁实际上并不加锁,当计算遇到冲突或者说前后不一致时会重试 直到成功) - 乐观锁的实现方式:CAS compare and swap。中文叫:比较并交换。CAS有3个操作数 内存值V 要跟内存值做比较的值A 和 新值 B。用人话可以说成是:我认为V的值应该是A,如果是,那么哥就对了,那我就可将V的值更新为哥想要的值B,如果不是,那么哥就错了(说明数据发生了改变),这时哥不做任何修改,但你告诉我现在V的值是多少,然后哥根据你告诉我的新值,做完运算后再来重复第一步的操作。代码实现如下:while(true){
if(V == A){
V = B;
return ;
}else{
A = V;
}
} - 要安全的发布一个对象,对象的引用及对象的状态必须同是对其它线程可见。方式可以如下
:在静态初始化函数中初始化一个对象引用,将对象的引用保存到volatile类型域或者AtomicReferance中,将对象的引用保存到某个正确构造对象的final类型域中,将对象的引用保存到由锁保存的域中。 - 学习使用队列,在构建高可用的应用系统时,有界队列是一种强大的资源管理工具,它能抑制并防止产生过多的工作项(如系统突然大量的对数据库进行插入或更新操作,这时就应当把所有的操作放入一队列,按一定的速率来去操作数据库),使应用程序在负荷过重的情况下变得更加健壮。
JAVA 并发的基础笔记
最新推荐文章于 2024-10-20 09:58:57 发布