多线程老是会长眠不醒??

meteorlg 2007-02-01 10:40:40
我写了一个多线程的程序,开了30个线程,每个线程会到网络上下载一些网页然后做些处理然后保存成xml文件,有一个主线程控制它们,分配任务给它们。

在我的机器上运行没有问题,可是换到另一台服务器上运行个一天就会发现它停在那里不动了,我打印出一些信息发现有2,3个线程还在运行状态,但是它们就一直不动了,因为我每一步处理都会输出东西出来,而此时屏幕上不会再有任何工作线程打印的东西出来,只有主线程在定期的判断它们是否结束,它们为什么停止不动了呢?

我也设了connect的timeout和read的timeout,不知道它们为什么会停止不动?各位老大帮我分析分析应该怎么解决这个问题啊?提一下思路也可以啊,多谢啊
...全文
341 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meteorlg 2007-02-03
  • 打赏
  • 举报
回复
我设了timeout,如果连接失败就跳过这个url
现在我把所有打出的信息都去掉了,然后发现就是java heap size 溢出的问题,我已经设了512M的heap size,还是不够,我的内存是1G的
请问如何才能避免内存溢出啊
我总共的数据才不到300M,应该是有内存泄露的问题吧
请问,如何检测和解决内存泄露呢?
wmzsl 2007-02-01
  • 打赏
  • 举报
回复
估计是死锁了! 看看有没有锁
meteorlg 2007-02-01
  • 打赏
  • 举报
回复
可是并不是cpu的问题啊,cpu是空闲的
json_001 2007-02-01
  • 打赏
  • 举报
回复
是否应该在线程上加一个优先级判断标志,每次获得cpu的线程-1, 其它的线程+1。呵呵。
meteorlg 2007-02-01
  • 打赏
  • 举报
回复
谢谢你的回复
cpu是空闲的,而且在那个时候我的程序基本没有占用cpu
我的线程是当主线程分配给它一个初始url的时候开始进入工作状态,然后它不需要其它资源即可以工作了,它会调用一个单例的对象,向其中的文档缓冲区增加分析好的文档,当这个缓冲区满的时候这个单例对象会向磁盘写文件并清空缓冲区。每个线程也会调用一个单例的对象执行写日志操作。每个线程也会向一个任务队列的单例对象增加新发现的任务。线程执行结束会回到空闲状态,等待主线程分配任务,只有主线程会从任务队列取下一个任务分配给空闲的线程。

请问我的设计有没有什么问题呢?哪里会引发线程无限等待?谢谢
yzh963 2007-02-01
  • 打赏
  • 举报
回复
应该是等待线程,得不到资源或cpu时间,检查一下,你线程请求的资源是不是正在被其它线程或程序使用没有释放呀
yunxiang 2007-02-01
  • 打赏
  • 举报
回复
是不是可能是网络问题呢?
如果程序在进行中。其中一个网络有问题。断线了。你的程序有自动重新连接的么?
meteorlg 2007-02-01
  • 打赏
  • 举报
回复
初步觉得是有内存泄露导致内存溢出
我用了一些vector,list,hashtable等等,应该如何避免内存泄露呢?
比如我用vector做缓冲区,当我要清空缓冲区的时候应该用vector.clear()还是
vector=new Vector()?
已经博主授权,源码转载自 https://pan.quark.cn/s/fdfcb1303993 ### 高速电路接口原理与应用详解 #### 引言 信息技术的迅猛进步推动了高速数据传输需求的持续提升,特别是在高性能计算、网络通信等关键领域。为了达成高效的数据交换,高速集成电路间的互连技术成为了研究的热点。本文将系统阐述几种典型的高速接口规范——PECL(Positive Emitter Coupled Logic)、LVECL(Low Voltage Emitter Coupled Logic)、CML(Current Mode Logic)和LVDS(Low Voltage Differential Signaling),并深入分析它们的电路构造和应用特性。 #### 1. ECL电路基础 ECL电路是早期为应对高速数据传输需求而研发的一种逻辑电路,其运行速度极快,最高可达到10Gbps。通过维持晶体管工作于线性和截止区域,ECL电路有效规避了饱和区的影响,从而获得了迅速的开关响应。接下来将具体解析ECL电路的构成要素及其运作机制。 #### 1.1 ECL线接收器电路组成 - **差分放大器**:由晶体管Q3、Q4、Q5构成,是整个电路的核心部分。其中,Q5作为恒流源,具备较大的交流等效电阻,能够提供稳定的电流,确保电路的稳定运作。 - **发射极跟随器输出电路**:由Q1、Q2组成,主要用于电平调整和输出驱动,确保输出信号与下一级电路的兼容性。 - **偏置电源**:由Q6、Q7以及二极管D1、D2构成,为差分放大器提供可靠的偏置电压,使其始终工作在线性放大区间。 #### 1.2 ECL电路的显著特性 - **高运行速率**:由于晶体管工作在线性和截止状态,不受...
源码直接下载地址: https://pan.quark.cn/s/27dcad4290ca Silicon Labs(前身为Silicon Laboratories)为其USB至UART转换控制器开发了一款官方驱动程序,即CP210x驱动,该驱动程序在Windows 10操作系统上表现出色。此驱动确保计算机能够识别并有效通信与使用配备CP210x芯片的设备,包括开发板、模块或USB转串口适配器。CP2012作为CP210x系列中的一个型号,同样受益于该驱动程序的支持。驱动程序版本v6.7.3代表一个较新的升级,其目标在于解决兼容性挑战,增强性能并提升稳定性。"win10"标签突出了该驱动对Windows 10系统的优化及兼容性,暗示用户在Windows 10环境下可以无障碍地运用CP210x设备。压缩包内含的文件如下: 1. `slabvcp.cat`:作为验证文件,用于核实驱动程序的数字签名,确保驱动源自可信渠道且未被篡改。 2. `CP210xVCPInstaller_x64.exe` 和 `CP210xVCPInstaller_x86.exe`:这两个安装程序分别针对64位和32位的Windows系统设计,用户需依据自身操作系统选择适配版本进行安装。 3. `slabvcp.inf`:作为驱动配置文档,其中包含驱动程序的安装参数,Windows系统将依据此文件进行驱动安装与配置。 4. `SLAB_License_Agreement_VCP_Windows.txt`:作为许可文件,用户在安装前须仔细阅读并确认同意其中的条款。 5. `dpinst.xml`:该部署脚本旨在简化驱动安装流程,自动化安装过程以确保驱动正确部署至系统。 6. `x86` 和 `x64...

81,110

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧