JAVA 并发的基础笔记

  1. volatile类型:  根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。  每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。所以,同一变量的值在工作内存和主存中可能不一致。volatile其实是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我。
  2. synchronized关键字是悲观锁 也叫独占锁。所谓悲观锁就是某一线程独占资源,其他线程只能干等着,这种锁在高并发中性能很差(还有一种实现锁的方式是乐观锁
    乐观锁实际上并不加锁,当计算遇到冲突或者说前后不一致时会重试 直到成功)
  3. 乐观锁的实现方式: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;
    }
    }
  4. 要安全的发布一个对象,对象的引用及对象的状态必须同是对其它线程可见。方式可以如下
    :在静态初始化函数中初始化一个对象引用,将对象的引用保存到volatile类型域或者AtomicReferance中,将对象的引用保存到某个正确构造对象的final类型域中,将对象的引用保存到由锁保存的域中。
  5. 学习使用队列,在构建高可用的应用系统时,有界队列是一种强大的资源管理工具,它能抑制并防止产生过多的工作项(如系统突然大量的对数据库进行插入或更新操作,这时就应当把所有的操作放入一队列,按一定的速率来去操作数据库),使应用程序在负荷过重的情况下变得更加健壮。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值