欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

并发,锁相关 博客分类: 总结-2014  

程序员文章站 2024-03-25 22:54:46
...

多线程是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等