多线程是否有意义

2023-05-14 11:32 综合 0阅读 投稿:小编

就老夫多年的JAVA经验来看,多线程无论应付面试还是实际中开发,都是很有必要的!

先看看什么是线程?线程是CPU调度的最小单位!换句话说你所有的数据计算,赋值,交换等都是由线程携带数据让CPU来执行的!
多线程是否有意义图1

关于CPU执行我来打几个比方:(不懂你来打我)

单核CPU单线程:你一个人(单核CPU)吃一盘包子(单线程),一口气吃完了(CPU效率高,没有阻塞)

单核CPU的多线程:你一个人吃一桌菜(多个线程),上了一碗砂锅,但是太烫了你只能等着(线程阻塞,CPU浪费了),然后上了一盘四个包子你吃完了,配合着砂锅,花生米等菜,尽管砂锅还是烫,但是你可以吃包子和花生米,所以你总的吃饭时间变短了(CPU使用效率提高,多个线程轮换执行,不再被单个线程阻塞)!

多核CPU多线程:原来一个人吃一盘四个包子需要四分钟,但是现在有四个人(四核),只要一分钟就吃完了(多线程利用效率高,执行比单核快了四倍)!

多核CPU单线程:只上了一个包子,只能一个人吃,另外三个人干等着后面的包子(别的线程),CPU使用率极大的浪费,效率很低!
多线程是否有意义图2

从例子来看,多核CPU多线程对于我们的执行速度和效率有了倍数级的提高!

如果只是简单的单线程不阻塞的情况,那么单核单线程就能提现出最大的执行效率!所以是否选用多线程还需要看实际情况来定!

在现在互联网快速发展的时代,数据量较大,各种页面请求也较多,服务器通常都是多进程多线程的执行方式才能应付不断增加的请求!

在现实编程中有哪些利用多线程的场景呢?

1,多阻塞的情况:JAVA是抢占式线程,如果在代码中有诸如读取文件,等待响应,阻塞IO的情况要用多线程减少阻塞引起的CPU使用率降低!

2,多任务可切割:比如需要下载一个G的文件,你可以分为五段,各不影响的下载,最后拼在一起成为完整的文件,效率提高数倍!如果是从头到尾接受二进制流,那么不仅CPU资源浪费,而且效率很低!

3,各种连接池:数据库连接池,对象池等!

4,定时任务,批处理任务,日志同步等场景!

5,分布式计算,map reduce等,异步回调等!

怎么实现多线程的?实现runnable接口,或者继承thread类等方式!

多线程在JAVA的发展过程中占着举足轻重的作用,从最开始的并发包,栅栏,线程池,synchonize锁,lock锁,读写锁,callable回调,到JAVA7的fork-join框架,再到JAVA8的流式并行处理,可以说多线程技术使用越来越简单,但是功能越来越完善!
多线程是否有意义图3
多线程是否有意义图4

既然你买电脑喜欢讲八核,十六核!也就代表多线程技术会伴随着我们以后的所有数据处理中!

玩不转多线程,别说你会玩JAVA!

声明:壹生活百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系350149276@qq.com