我是靠谱客的博主 野性蜜粉,最近开发中收集的这篇文章主要介绍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

最后

以上就是野性蜜粉为你收集整理的Java并发编程(八)- 总结并发编程解决的核心问题线程安全性问题管程相关的死锁处理        线程的生命周期并发容器的全部内容,希望文章能够帮你解决Java并发编程(八)- 总结并发编程解决的核心问题线程安全性问题管程相关的死锁处理        线程的生命周期并发容器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部