时间:2020.10.28 发布人:zememai15
已解决问题
谷歌zememai15用户在2020.10.28提交了关于“
宰执天下j**a多线程的好处?”的提问,欢迎大家涌跃发表自己的观点。目前共有答案,最后更新于2025-02-23T20:53:56。希望大家能够帮助她。
详细问题描述及疑问:期待您的答案,你就是当代的活雷锋,太感谢了
!
希望以下的回答,能够帮助你。
第1个回答
用户名:匿名用户
1.充分利用CPU资源
现在世界上大多数计算机只有一块CPU.因此,充分利用CPU资源显得尤为重要。当执行单线程程序时,由于在程序发生阻塞时CPU可能会处于空到赶闲状态。这将造成大量的计算资源的浪费。而在程序中使用多线程可副洋十业久止低钱以在某一个线程处于休眠或阻塞时,而CPU宜地快议买干四常亚又恰好处于空闲状态时来运行其他的线程。这样CPU就很获给尽微触朝套难有空闲的时候。因此,CPU资源就得到了充分地利用。
2.简化编程模型
如果程序只完成一项任务,那只要写一个单线程的程序,并且按着执行这个任务的步骤编写代码即可。但要完成多项任务,如果还析概使用单线程的话,那就得在在程序中判断每项任务是否应该执行以及什么时候执行。如显示一个时钟的时、分、秒三个指针降怕乱用额手药财氧。使用单线程就得在合案核孩境语常均循环中逐一判断这三个指问答针的转动时间和角度。如果使用三个线程分另来处理这三个指针的显示,那么对于每个线程来说就是指行一个单独的任务。这样有助于开发人员对程序的理解和维护。
3.简化异步事件的处套医判境将天亲短理
祷个服务器应用程序在接收不同的客户端连接时最简单地处理方法就是为每一个客户端连接建立一个线程。然后**线程仍然负责**来自客户端的请求。如果这种应用程序采用单线程来处理,当**线程接收到一个客户端请求后,开始读取客户端发来的**,在读完**后,read方法处于阻塞状态,也就是说,这个线程将无法再**客户端请求了。而跑要想在单线程中处理多个客户端请求,就必须使径准办排划略求用非阻塞的Socket连政范接和异步I/O.但使用异步I/O方式比使用同步I/O更难以控制,也更容易出错。因此,使用多线程和同步I/O可以更容易地处理类似于多历立多空故月危府孩度请求的异步事件。
4.使GUI更有效率
使用单线倍孩少放身须批爱律呼抗程来处理GUI事件时,必须使用循环来对随时可能发生的GUI事件进行扫描,在循环**除了扫描GUI事件外,还得来执行其他的程序代码。如果这些代码太长,那么GUI事件就会被“冻结”,直到这些代码被执行完为止。
在现代的GUI框架温击细沿离长历已算沿(如SWING、AWT和SWT)中都使用了一个单独的事件分派线程(eventdispatchthr冲坏界区哪烟ead,EDT)来对GUI事件进行扫描。当我们按下一个按钮时,按钮的单击事件函数会在这个事件分派线程中被调用。由于EDT的任务只是对GUI事件进行扫描,因此,这种方式对事件的反映是非常快的。
5.节约成本
提高程序的执行效率一般有三种方法:
(1)增加计算机的CPU个数。
(2)为一个程序启动多个进程
(3)在程序中使用多进程。
第一种方法是最容易做到的,但同什是最昂贵的。这种方法不需要修改程序,从理论上说,任何程序都可以使用这种方法来提高执行效率。第二种方法虽然不用购买新的硬件,但这种方式不容易**享**,如果这个程序要完成的任务需要必须要**享**的话,这种方式就不太方便,而且启动多个线程会消耗大量的系统资源。第三种方法恰好弥补了第一种方法的缺点,而又继承了它们的优点。也就是说,既不需要购买CPU,也不会因为启太多的线程而占用大量的系统资源(在默认情况下,一个线程所占的内存空间要远比一个进程所占的内存空间小得多),并且多线程可以模拟多块CPU的运行方式,因此,使用多线程是提高程序执行效率的最廉价的方式。