Java提供多线程机制,在并发时以多个线程来处理每个请求的方式完成请求和响应。然而,广大程序员在实际编程时会遇到各种各样的问题和疑惑,在面对这些疑难杂症时,有的同学通过百度或谷歌迅速精准的搜索到解决方法,然后大功告成,在紧张的工作节奏中完成了领导交代的任务,待下次又出现这类问题时,再次百度或谷歌,如果哪天断网你还无法解决问题了!?我想说的是,一定要真正的理解问题背后的原因,比如线程死锁,到底是为何?是不是锁粒度大,多个资源被一个锁控制;系统响应慢,线程大量阻塞,是程序的哪块性能没优化好?或者是IO的影响,如果是IO瓶颈,你能分析出是网络IO还是磁盘IO,你是否考虑异步或者React模式实现?是否使用线程池?线程池的参数设置是否合理?锁的同步代码块是否可以考虑锁消除或缩小同步块范围?
Java对我们来说,已经发展20多年的历史,现在诞生大量的框架,SSH SpringCloud Dubbo Shiro等。其实大量框架的催生,本质上都是以Java核心的技术为基础做了扩展和外延,所以掌握基础知识再学起框架会理解更加深刻,也能走的更久远。
我们都知道并发编程,在大型互联网公司用的特别多,高并发高流量给程序员带来巨大挑战。当然这是个整体方案,而不光是程序员能单独解决的。没有服务器扩容,没有高带宽,没有分布式集群部署,程序员使出浑身解数也无可救药!站在程序员角度,我们应该从基础学起,深刻理解并发的原因、可能出现的线程安全问题、共享变量通信机制、锁的粒度控制、锁技术的选择和分布式锁的实现。
其中Java提供关键字synchronized,大家都知道他是JVM提供的锁机制,用于修饰同步代码块、方法或静态类方法,然后你知道背后的原理吗?他真的是一种很笨重的重量级锁吗?他内部是否分多级锁?具体如何实现?其次,Java对象内存结构是什么?他跟锁synchronized有什么关系?一个我们跟他打了多年交道的朋友(Java对象),我们有必要对其内部结构有所了解!
其次轻量级锁volatile,只是对变量的修饰,起到轻量级的线程同步效果!volatile写-读的内存语义是什么?volatile内存语义的实现?volatile和synchronize的区别是什么?至于内部的复杂原理和JVM层面的重排序规则,如果想了解又要几篇文章才能讲明白。
疫情封闭期间在家闲的无聊,我参考部分书籍,录制一套视频,专门讲解Java并发编程的基础知识,后面还会结合开源项目讲解并发知识,希望小伙伴踩以下地址--edu1.mimixuetang.com。
技术之路你并不孤单,我与你同行!
来源:CSDN
作者:东方球败
链接:https://blog.csdn.net/qq_36211919/article/details/104294825