并发,锁相关

多线程是java中一大块,伴随的多线程必然有临界区资源的竞争问题:

 

当多个线程同时访问临界区的时候,就会产生所谓的并发问题:

 

java中处理并发通常最常用的也是技术个人认为:

 

1: 不可变类,  2: synchronied同步字段  3: lock    4:ThreadLocal线程副本 5:并发容器  6: cas操作

7: Semaphore(1)二进制信号量

    1: 不可变类,很简单就是设计线程安全的类,

 

   2: synchronied同步字段

         对方法: public synchronide void add(int l);

         对对象: public void add(int i){

                                synchronized(this){

                                            

                                   }

                       } 

         对类:   publc void add(int i){

                                   synchronized(Test.class){

                               }

                       }

synchronized对当前的线程是可以重入的:

 

 

关于cas操作: 就是比较和更新,然后接合非阻塞算法,

for(;;){

    cas(exp, update);

}

juc中很多并发容器比如 队列等都是采用非阻塞算法实现的,

 

cas操作会产生一个ABA问题

 

 

 

 // 笔记本坏了

 

如何设计高效的锁

 

1: 尽量减少锁的粒度,把计算时间长,io等放到外面

 

2:使用分坼锁和分离锁

    分坼:  对不同的类型业务用不同的锁对象

    分离:  类似ConcurrentHashMap 采用了16个锁,每个所锁住1/16

 

3:使用juc里的容器

 

4:使用cas,原子操作

 

5:活用ThreadLocal

 

6: 采用其他第三方的,memcached, redis等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值