请教java多线程死机问题
nnlue 2010-02-09 09:47:02 请各位高手指教,问题详情如下:
我是用eclipse写的java程序,可以同时连接多个读卡器,对多张卡同时执行写卡操作。我对每个读卡器创建了一个线程,程序开始后,多个线程同时启动,轮流排队对每个读卡器进行写卡操作,写卡命令会在屏幕上显示,所以多张卡会在差不多的时间点写完。
问题是我的程序同时写5张卡基本上没什么问题,但是同时写6张以上的卡时在写到40分钟左右的时候,CPU的使用率就逐渐累加,从10%到20%,然后到40%-50%,之后就会死掉了,没有任何错误提示,都是在发了一条命令后不显示返回数据,然后程序的UI就不动了,但是电脑上的其他程序都是正常的。程序死掉时偶尔会有卡片已经写卡成功,但多数情况下是所有的卡片都没有完成写卡。
eclipse中的VM参数为-Xmx1024m,运行程序的电脑内存为2G。我把程序打包成可执行的jar文件,copy到别的机器上运行。
我自己的机器是2G内存,其他配置比较高,有时候能同时写成功6张和6张以上的卡,但是在另外一台老机器上就不行,那台机器的内存也是2G,但是其他的配置就比较低了。
读卡器都是连在一个带电源的USB hub上,所以排除了USB口供电不足的问题。
还有写卡的数据量挺大的,每张卡要写4块程序区,1块数据区,每块区域都是从0000到FFFF,每条命令写0x80个字节,所以每张卡要发2500多次命令。
我的程序中没有对线程做终止处理,也没有调用isAlive()之类的函数判断线程是否还处于活动状态.