JAVASE Socket编程 CPU 占用率高问题 及 解决

本文探讨了在多线程程序中使用死循环导致的高CPU占用率问题,并提供了优化建议。主要关注客户端和服务端的多线程实现,特别强调了在while(true)循环中采用阻塞式方法的重要性,以避免资源过度消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序背景:  模拟 手机短信 收发  包括 读 、 写   当前用不在线 信息的保存 以及 离线发送等

 

程序设计思路 :  客户端  双线程...  发送信息 Thread

                                             接收信息  Thred

                      好处: 不会产生阻塞..

                     服务器端  多线程:  两个 ServerSocket  用于 等待  客户端的  接收  和 发送

 

遇到问题: 调试期间,单 客户端成功连接后,CPU 占用率 高达 50%

程序简化代码 如下: 下面代码中 我会 标注出 出现问题的 地方 

      客户端 如下 main方法中的代码  注意 下面代码 仅仅是为了说明问题..不是 完整的实例程序

      public static void main ( String[] args )

      {

            new Socket ( "127.0.0.1", 5678 );

            new Socket ( "127.0.0.1", 8988 );

             //下面代码 产生 占用率高的问题  

              while (true)

              {

              }

      }

 

问题产生原因:  while true 循环 是一个死循环,同时因为 while 循环的不间断执行,导致频繁的访问资源,使cpu 占用率 过高

解决办法: while  true  循环中 采用阻塞似的 方式,例如 输入流的 Scanner 中的 .nextInt()方法等

此类问题,在服务器端,用户端 的 多线程 程序中 run 方法中 也出现过 ,希望能给大家提个醒.. 避免类似的错误发生...

 

PS:希望大家能推荐下 能画简单流程图的 软件... 以后 我可以把图画出来 这样就 更清晰明了了

 

转载于:https://www.cnblogs.com/anger-coder/archive/2012/08/17/2644679.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值