不管多线程的挑战仍然被使用的原因,是因为多线程仍然有几个益处,这些益处中的一些是:
更好的资源利用
在一些场景下简单的程序设计
更快响应的程序
更好的资源利用
想象一个应用读取和处理来自于本地文件系统的文件。让我们说从磁盘中读取一个文件花费5秒钟,处理它花费2秒钟,执行两个文件将会花费:
5 seconds reading file A 2 seconds processing file A 5 seconds reading file B 2 seconds processing file B ----------------------- 14 seconds total
当从磁盘中读文件的时候,大部分的CPU时间都花费在等待文件读取上了。在那个时间CPU是相当空闲的。它可以做一些其他的事情。通过改变这个操作的顺序,CPU可以被更好的利用。看看这个顺序:
5 seconds reading file A 5 seconds reading file B + 2 seconds processing file A 2 seconds processing file B ----------------------- 12 seconds total
CPU等待第一个文件被读。然后它开始读取第二个文件。当第二个文件正在被读取的时候,这个CPU执行第一个文件。记住,当等待文件从磁盘中读取的时候,这个CPU大部分时间是空闲的。
通常情况下,CPU在等待IO的时候可以做一些其他的事情。它不一定必须是磁盘IO。它也可能是网络IO,或者是来自一个用户的输入。网络和磁盘IO比CPU的和内存IO慢很多。
更简单的程序设计
如果你正在单线程应用中手工的编写上面的读取和处理文件的顺序的程序,你将不得不跟踪每一个文件的读取和处理的状态。代替的,你可以启动两个线程,每一个线程都只是读取和处理一个单独的文件。这些线程中的每一个当等待磁盘读取文件的时候都会被堵塞。当等待的时候,其他的线程可以使用CPU去处理他们已经读到的文件的部分。这个结果就是磁盘将会一致保持忙碌状态,读取各种各样的文件进入内存。这个结果就是更好的利用了磁盘和CPU。它也会更简单的去编写程序,因为一个线程只是跟踪一个单独的文件。
更快响应的程序
另外一个公共的目标就是将一个单线程的应用转换成多线程的应用将会获得一个更快响应的应用。想象一个服务器应用,它正在监听进来请求的一些端口。当一个请求接收到了之后,他处理这个请求,然后再返回去监听。这个服务器循环概述如下:
while(server is active){ listen for request process request }
如果这个请求花费很长时间去处理,在那段时间中没有新的客户端发送请求到服务器。只有服务器可以监听接收的请求。
一个替换的设计就是对于监听的线程把一个请求传给一个worker线程,并且立刻返回监听。这个worker线程将会执行这个请求以及发送一个应答到客户端,这个设计概述如下
while(server is active){ listen for request hand request to worker thread }
这个方式,服务器线程将会很快返回到监听器。因此更多的客户端可以发送请求到服务器。这服务器变得更快的响应了。
对于桌面应用同样也是一样的。如果你点击一个按钮开启一个长时间的任务,并且正在执行任务的线程是这个正在更新窗口,按钮等等的线程,然后当任务执行的时候,这个应用出现不响应的情况。代替的,这个任务可以转换成一个worker线程。当worker线程忙着处理任务的时候,这个窗口线程可以空闲的去响应其他用户的请求。当worker线程完成的时候,它会发出信号通知窗口线程。这个窗口线程然后可以根据这个任务的结果更新应用窗口。使用worker线程设计的程序将会给予用户更快的响应。
以上就是Java 多线程好处的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Java如何缓解平台特定的问题?Java通过JVM和标准库来实现平台无关性。1)使用字节码和JVM抽象操作系统差异;2)标准库提供跨平台API,如Paths类处理文件路径,Charset类处理字符编码;3)实际项目中使用配置文件和多平台测试来优化和调试。

java'splatformentenceenhancesenhancesmicroservicesharchitecture byferingDeploymentFlexible,一致性,可伸缩性和便携性。1)DeploymentFlexibilityAllowsibilityAllowsOllowsOllowSorlowsOllowsOllowsOllowSeStorunonAnyPlatformwithajvM.2)penterencyCrossServAccAcrossServAcrossServiCessImplifififiesDeevelopmentandeDe

GraalVM通过三种方式增强了Java的平台独立性:1.跨语言互操作,允许Java与其他语言无缝互操作;2.独立的运行时环境,通过GraalVMNativeImage将Java程序编译成本地可执行文件;3.性能优化,Graal编译器生成高效的机器码,提升Java程序的性能和一致性。

效率testjavaapplicationsforplatformcompatibility oftheSesteps:1)setUpautomatedTestingTestingActingAcrossMultPlatFormSusingCitoolSlikeSlikeJenkinSorgithUbactions.2)contuctualtemualtemalualTesteTESTENRETESTINGINREALHARTWARETOLEALHARDOELHARDOLEATOCATCHISSUSESUSEUSENINCIENVIRENTMENTS.3)schictcross.3)schoscross.3)

Java编译器通过将源代码转换为平台无关的字节码,实现了Java的平台独立性,使得Java程序可以在任何安装了JVM的操作系统上运行。

ByteCodeachievesPlatFormIndenceByByByByByByExecutedBoviratualMachine(VM),允许CodetorunonanyplatformwithTheApprepreprepvm.Forexample,Javabytecodecodecodecodecanrunonanydevicewithajvm

Java不能做到100%的平台独立性,但其平台独立性通过JVM和字节码实现,确保代码在不同平台上运行。具体实现包括:1.编译成字节码;2.JVM的解释执行;3.标准库的一致性。然而,JVM实现差异、操作系统和硬件差异以及第三方库的兼容性可能影响其平台独立性。

Java通过“一次编写,到处运行”实现平台独立性,提升代码可维护性:1.代码重用性高,减少重复开发;2.维护成本低,只需一处修改;3.团队协作效率高,方便知识共享。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

WebStorm Mac版
好用的JavaScript开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器