Java并发编程(八)- 总结

目录

并发编程解决的核心问题

     分工

     协作

     资源分配(互斥)

线程安全性问题

     可见性

     有序性

     原子性:

管程相关的死锁处理        

线程的生命周期

并发容器


并发编程解决的核心问题

        并发编程三个主要问题:分工、协作和资源分配。

        分工:拆解和分配任务;

        协作:线程间的等待、通知等协作;

        资源分配(互斥):同一时刻只允许一个/部分线程访问共享资源;

        协作问题,资源分配(互斥)问题使用管程;

      分工

        分工问题使用多线程解决;

        多线程并行操作:线程池 +Future;

        多线程聚合操作:CompletableFuture

        多线程批量操作:CompletionService

        多线程分治操作:Fork/Join

     协作

        线程间的协作,主要通过管程的等待和通知模式;

        管程的实现方式:synchronized,Lock

        其他的协作工具:

                Semaphore

                CountDownLatch

                CyclicBarrier

     资源分配(互斥)

        共享资源的互斥问题一般通过加互斥锁,或者其他无锁模式解决;

        管程的实现方式:synchronized,Lock

        无锁模式:

                不变模式

                写时复制模式Copy-on-Write

                线程本地存储模式

                CAS和原子类

线程安全性问题

        线程安全是指:运行结果是确定的。

        导致不确定的主要源头是:可见性问题,有序性问题,原子性问题。

      可见性

        可见性问题由CPU缓存导致;

        解决方案:根据程序逻辑,按需禁用缓存。

        具体方法:volatile、synchronized 和 final 三个关键字,Happens-Before规则。

      有序性

        有序性问题由编译优化导致;

        解决方案:根据程序逻辑,按需禁用编译优化。

        主要靠Happens-Before约束完成。

      原子性:

        原子性问题由线程切换导致;

        解决方案:保证操作的中间状态对外不可见。通过互斥锁,让一块代码区域只有一个线程能

够执行。

        具体方法:管程(synchronized,Lock)

管程相关的死锁处理        

        破坏死锁条件:占有且等待,不可抢占,循环等待;

线程的生命周期

        可运行状态,休眠状态(阻塞状态,有时限等待状态,无时限等待状态),终止状态;

并发容器

        同步容器

        jdk1.5之前通过synchronized实现的同步容器;

        Collections.synchronizedXXX() 包装生成的同步容器;

        Vector、Stack 和 Hashtable,Java 提供的同步容器;

        并发容器

        jdk1.5及之后,为提升性能实现的安全容器;

        List:CopyOnWriteArrayList

        Map:ConcurrentHashMap,ConcurrentSkipListMap;

        Set:CopyOnWriteArraySet,ConcurrentSkipListSet;

        Queue:

                1,单端阻塞队列:LinkedBlockingQueue,ArrayBlockingQueue

                2,双端阻塞队列:LinkedBlockingDeque

                3,单端非阻塞队列:ConcurrentLinkedQueue

                4,双端非阻塞队列:ConcurrentLinkedDeque

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值