浏览 6889 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-15
/** * 仪器数据处理线程 每一个socket请求过来认为是一个仪器,一个仪器开一条线程 * 首先启动连接仪器监听线程 * 当有socket请求时,启动仪器数据处理线程,除非两边手动断开,否则不会中断 */ @Override public void run() { time.schedule(new LabDeviceListener(loader), 3000, 5000); while (!this.isInterrupted()) { try { Socket socket = serverSocket.accept(); if (null != socket) { CreateObject co = new CreateObject(socket, loader); co.setDaemon(true); co.start(); } } catch (IOException ex) { } } } [code/] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-10-15
最后修改:2012-10-15
一直处理while循环当然cpu会疯掉了,试着让线程休息一下
|
|
返回顶楼 | |
发表时间:2012-10-15
serverSocket.accept(); 这是一个阻塞时的方法,如果没有client端连接的话是不会执行下一步的
time.schedule(new LabDeviceListener(loader), 3000, 5000); 尽量不要这样循环的一直执行这个任务new LabDeviceListener(loader) 你每五秒钟就创建一个这个对象 如果LabDeviceListener 这个里面还有这段代码的话,那每次就会多出来很多这样的任务,这样就会无线的增长,cpu100% 请把LabDeviceListener这个类贴出来 |
|
返回顶楼 | |
发表时间:2012-10-15
有几个新的socket请求,就启动几个线程进行数据接收和处理
1.这个思路有问题,建议使用一个线程池来控制线程数量。 2.在这个循环中会创建多少个socket对象? while (!this.isInterrupted()) { try { Socket socket = serverSocket.accept(); |
|
返回顶楼 | |
发表时间:2012-10-15
use mina or netty.
|
|
返回顶楼 | |
发表时间:2012-10-15
最近也遇到一个这样的问题 ,求教,应该如何处理,CPU 使用过高的问题
|
|
返回顶楼 | |
发表时间:2012-10-15
死循环CPU肯定是吃不消的,一般都会sleep一下,让出资源让系统甘其它的活
|
|
返回顶楼 | |
发表时间:2012-10-15
线程就是死循环,如果你执行后不休眠,不管什么程序都会挂掉的!
Socket编程也是一样,其实是每隔一段时间从管道中读取流,这个间隔可以段,但是必须有! |
|
返回顶楼 | |
发表时间:2012-10-16
qiaohhgz 写道 serverSocket.accept(); 这是一个阻塞时的方法,如果没有client端连接的话是不会执行下一步的
time.schedule(new LabDeviceListener(loader), 3000, 5000); 尽量不要这样循环的一直执行这个任务new LabDeviceListener(loader) 你每五秒钟就创建一个这个对象 如果LabDeviceListener 这个里面还有这段代码的话,那每次就会多出来很多这样的任务,这样就会无线的增长,cpu100% 请把LabDeviceListener这个类贴出来 问题应该不是出在循环上 而是time.schedule(new LabDeviceListener(loader), 3000, 5000); linux 找出占用cpu最高的线程 http://hi.baidu.com/delete_h/item/7751cb9627c24c4ff042157f |
|
返回顶楼 | |
发表时间:2012-10-16
zuo_huai 写道 最近也遇到一个这样的问题 ,求教,应该如何处理,CPU 使用过高的问题
应该是循环的问题,我这里通过跳出循环, 启动10个线程,总共处理10000 个数据,CPU 使用情况是 20%~30% ,在正常的范围中 |
|
返回顶楼 | |