并发编程阶段性总结

前言

前面几篇文章详细介绍了Java并发领域常见的知识原理,对并发知识有了系统的理解,今天再对并发知识做一次阶段性总结。下面是前几天关于并发知识的文章,感兴趣的伙伴自取。

Java并发编程之Thread知识整理

Java并发编程之ThreadPool知识整理

Java并发编程之ThreadLocal知识整理

Java并发编程之volatile知识整理

Java并发编程之synchronized知识整理

JAVA并发之AQS基础总结

Java并发知识之ReentrantLock

Java并发编程之ArrayBlockingQueue知识整理

Java并发编程之CopyOnWriteArrayList

Java并发编程之CountDownLatch知识整理

Java并发编程之CyclicBarrier知识整理

Java并发编程之Semaphore知识整理

这些文章包括了Java并发编程中常用的一些组件,但是还有ConcurentHashMap,LongAdder,AtomicLong,ForkJoinPool等并发知识未涉猎,笔者还没有很好的理解,后续有更深刻的理解再出文​分析。

并发知识在Java中是比较难学懂,也比较难学好的一项基本工,因为并发编程不仅仅要有足够的理论知识做支撑,还要在实际并发的业务场景中打磨历练,才能对并发编程有更高的理解​。笔者结合自身的工作经验和最近学习的心得,从下面几个问题来对并发知识做一次阶段总结,给前面的学习做一个沉淀。

一、并发出现的背景

并发问题其实不是计算机出现就有了,并发是随着硬件的不断升级,业务系统复杂度上升而逐渐演化而来的。

1、随着cpu的升级,一台计算机可能有多个cpu核心,那么就同时支持多个线程运行,多个线程对共享资源的操作就会产生并发问题​。

2、随着业务系统的复杂度上升,一个业务系统从单体应用演化成分布式应用,到现在的微服务应用,用户的请求可能会被路由到不同的计算机进行处理,这样如果多个请求都对同一个共享资源进行操作,也会带来并发的问题。

二、并发带来的问题

1、从数据层面讲,并发会导致程序数据错乱,程序出现和预期不一致的结果

2、从业务层面讲,并发可能会导致资金损失,损害公司或者用户利益

三、并发问题的解决方案​

在Java领域,jdk设计者提供了多种解决并发的手段,可以​以下几类:

1、无锁

像ThreadLocal就是一种无锁的设计,通过空间​换取线程安全性。

2、乐观锁/自旋锁

AtomicLong,ReentrantLock,Semaphore等是借助cas这种乐观锁机制,

减少了系统切换开销

3、重量级别锁

Synchronized是一种重量级锁的手段,会导致线程内核态和用户态之间的切换,性能是极低的。

四、并发编程的未来
随着硬件的发展和社会数字化的发展,并发编程的场景应该是会越来越多,并发​编程应该是未来程序员必须掌握的一项基本工。近两年go语言也越来越流行,go语言是一门为并发而生的语言,在并发领域表现强悍的语言,期待以后有更好的发展​。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

服务端技术栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值