作为一个java初学者,改如何学习多线程?

多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲。在平时工作中如若使用不当会出现数据错乱、执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关重要。

1、为什么要使用多线程

首先,你学习Java多线程,得知道为什么要使用多线程吧?干嘛不老老实实使用单线程呢?这部分比较简单,书里讲的也很清楚,网上一搜资料也一大把,所以这部分不作解读 ( ̄ ̄)~

2、如何写出线程不安全的代码

好,现在你知道为什么要学Java多线程了。

那么当我们谈学习多线程时,我们是在谈学习什么呢?谈如何创建线程吗?不是,多线程里的大多数知识,都是在讲如何在多线程的环境下,保证代码的线程安全性,所以,接下来,你要了解,如何写出线程不安全的代码,知道什么样的代码是线程不安全的,你才会去想如何才能让它线程安全。

3、两个最基础的关键字

现在你写出了线程不安全的代码,是时候想想要怎样把它们变成线程安全的了。

在Java中,实现线程安全,最最基础的就是两个关键字,volatilesynchronize

volatile用的比较少,但是通过对它的学习,你可以了解Java内存模型,学会透过JVM去看线程问题,这是一个思考范式的提升: Volatile趣谈——我是怎么把贝克汉姆的进球弄丢的

synchronize,无需多言,不管是我们自己写的代码,还是JDK里的各个线程安全类,如ConcurrentHashMap,HashTable,大多都是利用synchronize来实现的线程安全:如何用一句话介绍synchronize的内涵

4、学会委托

学会了volatile和synchronize,以后就可以靠着两兄弟打遍天下无敌手了?

理论上可行,不过就像那句话说的,拿着锤子的人,看谁都是钉子。要想建一栋大楼,我们不能只有锤子,我们还需要起重机。Java就给了我们很多牛哄哄的起重机,比如ConcurrentHashMap,想想看,每次你想让你的Map线程安全,都要自己手动加上synchronize,这多麻烦,有了ConcurrentHashMap,我们只要把线程安全的重任,委托给它去实现就ok了。

Java中可以被委托的类还有很多,大体上分为三类,同步容器、并发容器和同步工具类,我的解读,也是通过一个简单的缓存案例,展示了如何把一个原本线程不安全的代码,通过synchronize改为线程安全,再通过委托,强化为性能更猛的缓存器:Java趣谈——如何构建一个高效且可伸缩的缓存

5、学点内功——线程池

现在你已经掌握了极强的外功了,十八般武艺样样精通,可以去武林大会挑战武林盟主了吗?还不行,光有极强的外功,却没有与之匹配的内功,只会让你走火入魔。

Java多线程也是如此,上面讲的都是外功,教你如何使用各种工具实现线程安全,但是想想看,实际项目中,你真的可以每个任务过来都给它创建一条线程吗?肯定不行嘛,内存会撑爆的!所以,你还需要掌握一项管控线程数量的技术——线程池,我将通过一个Web服务器的案例,给你展示为什么要使用线程池以及如何将无线程数量管控的代码改为由线程池管控的代码:Java趣谈——如何像Tomcat一样处理请求

另外,我还将从Java并发大师Doug Lea的视角,带你了解Java线程池背后的原理:Java线程池是如何诞生的?

6、学点设计——并发方案

学会了外功,又掌握了内功,可以上江湖闯荡了吗?等等,还有一点,你要知道什么才是你应该出手的时机,你总不能一上来就放大招杀敌一千自损四百吧。Java并发也是如此,你要知道,在什么情况下,应该对任务进行并行化处理,以及哪种情况下并行处理效果更好,我用了一个页面渲染器的案例,给你展示了,如何对并发方案进行设计和优化:Java趣谈——如何写出一个高效的页面渲染器。

好了,本篇文章就分享到这里了。有兴趣的新手伙伴们可以关注收藏起来,以后需要的时候可以多看看。如果有正在学java的程序员,可来我们的java技术学习扣qun哦:59789,1510里面免费送java的视频系统教程!

猜你喜欢

转载自blog.csdn.net/weixin_43660525/article/details/85778928
今日推荐