并发编程 总结

本文总结了Java并发编程的关键知识点,包括书籍推荐、注册中心(Redis、Zookeeper)、IO模型(BIO、NIO)、Netty、消息中间件(RabbitMQ、RocketMQ等)、线程安全、锁的重入、volatile关键字、线程通信、并发容器(如ConcurrentHashMap、CopyOnWriteArrayList)以及线程池的使用和自定义。通过对这些概念和技术的探讨,旨在提升Java后端开发的并发处理能力。
摘要由CSDN通过智能技术生成

        1、书籍
            Java编程思想
            企业架构模式
            Java并发编程实战


        2、注册中心
            Redis
            zookeeper
            SpringCloud

        3、IO
            BIO 阻塞IO
            NIO 非阻塞
        
        4、Netty

            用到的技术Future

        5、消息中间件
            RabbitMQ,RocketMQ,ActiveMQ,Kafka

        6、MQ

            场景1
            两系统间的数据通信,一个生产一个消费,两者不是一个节拍
                    后系统会产生一个严重的内存的堆积,最后内存溢出
            使用消息中间件,做缓冲

            场景2
            分布式系统
            数据生产,统一放到MQ中,然后生成订阅关系
            减少系统间交织的接口的复杂性

            RPC Dubbos

        7、线程安全

            多个线程访问某一个类或对象或方法时,这个类
            始终都能表现出正确的行为

            【1】无static的方法,关键字synchronized取得的锁都是对象锁
                 线程持有该方法所属对象的锁
            【2】关键字synchronized如果修饰的是静态的方法
                 相当于在类上加锁,独占.Class类

            private AtomicInteger num 原子性的

            sychronized 可以在任意的对象及方法上加锁,而加锁的这段代码
            称为互斥区或临界区

            多个线程访问某线程的run方法时,以排队的方式进行处理
            这里排队是按照CPU分配的先后顺序而定的,不是按照线程在
            代码中创建的顺序执行的
            
        8、对象锁的同步和异步
            同步synchronized
            同步的概念就是共享,如果不是共享的资源,就没有必要进行同步

            异步asychronized
            异步的概念就是独立,相互之间不受到任何制约
            就好像我们学习http时,在页面发起的ajax请求,我们可以继续浏览或操作页面的内容
            二者之间没有任何关系

            同步的目的就是为了线程安全,对于线程安全来说,需要满足两个特性:
                原子性
                可见性

            对象是一把锁,如果对象的属性发生变化是不影响锁的
            
                
        9、业务数据的脏读
            
            如果设置值得方法耗时较长
            或者值得方法耗时短,会产生脏数据,即数据不一致的情况
            
            在我们对一个对象的方法加锁的时候,需要考虑业务的整体性
            即为setValue/getValue方法,同时加synchronized同步关键字
            保证业务的原子性,不让回出现业务的错误
            
            数据库的ACID

            A 原子性
            C 一致性
            I 隔离性
            D 永久性
            
        10、锁重入
            当一个线程得到一个对象的锁后,再次请求
            此对象时是可以再次得到该对象的锁
            
            如:执行一个队列任务,很多对象都去在
            等待一个对象正确执行完毕再去释放锁
            但是第一个对象由于异常的出现,导致业务逻辑
            没有正常执行完毕,就释放了锁,后续的对象执行的都是
            错误的逻辑

        11、volatile
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值