问题描述
有个任务就是每隔10秒钟读取某个表的数据,然后再拆分读取的数据插入到别的表中。之前我使用了Timer每个十秒执行一次任务,但是后来莫名其妙的就无法初始化任务类,然后我干脆用了一个死循环while(true){Aa=newA();a.doing();//执行各种逻辑运算Thread.sleep(10000);//线程睡眠}上周末我跑了两天没什么问题,请问大侠们,觉得这么个写法有问题吗?
解决方案
解决方案二:
基本上沒問題,只要要注意一下Aa=newA();如果資源沒釋放完全,記憶體用量會越來越大。還有最好有可以離開迴圈的條件,方便當作開關。
解决方案三:
不会内存溢出吗
解决方案四:
引用1楼kebin0001的回复:
基本上沒問題,只要要注意一下Aa=newA();如果資源沒釋放完全,記憶體用量會越來越大。還有最好有可以離開迴圈的條件,方便當作開關。
应该是该关闭的都关闭了,因为毕竟也跑了两天了。我担心java本身就这么一直跑着不知道行不行。
解决方案五:
引用楼主liujunshi603的回复:
有个任务就是每隔10秒钟读取某个表的数据,然后再拆分读取的数据插入到别的表中。之前我使用了Timer每个十秒执行一次任务,但是后来莫名其妙的就无法初始化任务类,然后我干脆用了一个死循环while(true){Aa=newA();a.doing();//执行各种逻辑运算Thread.sleep(10000);//线程睡眠}……
booleanfiag=true;while(true){if(){}Aa=newA();a.doing();//执行各种逻辑运算Thread.sleep(10000);//线程睡眠}
解决方案六:
booleanfiag=true;while(true){if(!flag){break;}Aa=newA();a.doing();//执行各种逻辑运算Thread.sleep(10000);//线程睡眠}然后找个地方改变flag?
解决方案七:
该回复于2010-10-21 09:58:40被版主删除
解决方案八:
引用6楼sugarhappy的回复:
有意义吗?
当然有意义,你比方说发通知消息之类,你必须有个守护线程去监视数据的变化,然后处理。
解决方案:
引用3楼liujunshi603的回复:
引用1楼kebin0001的回复:基本上沒問題,只要要注意一下Aa=newA();如果資源沒釋放完全,記憶體用量會越來越大。還有最好有可以離開迴圈的條件,方便當作開關。应该是该关闭的都关闭了,因为毕竟也跑了两天了。我担心java本身就这么一直跑着不知道行不行。
应该问题不大,前提是处理程序不要有bug。
解决方案:
哈哈,楼主太可爱了,竟然跑了两天,呵呵。如果任务每10秒执行一次用不着使用这么消耗系统资源的方式,楼主可以去看一下:java.util.concurrent.ScheduledExecutorService这个接口
解决方案:
这些写没问题,原始的健壮。a.doing最好再trycatch一下。
解决方案:
该回复于2010-10-21 09:56:48被版主删除
解决方案:
没有问题的,只要不出现异常线程会一直跑下去。不过最好设个标志,像4楼说的,不过最好是:booleanflag=....;while(flag){}这样就可以控制什么事侯去停掉线程。
解决方案:
引用12楼boyone2009的回复:
没有问题的,只要不出现异常线程会一直跑下去。不过最好设个标志,像4楼说的,不过最好是:booleanflag=....;while(flag){}这样就可以控制什么事侯去停掉线程。
这种方法要好一些,想停的时候flag=false就行了
解决方案:
可以考虑下果大的那个接口。另外我很好奇为什么用Timer会死。
解决方案:
还是用timer吧死循环肯定是不推荐使用的,Java设计timer出来就是做定时器用的。
解决方案:
跑了两天!!
解决方案:
Aa;while(true){a=newA();a.doing();//执行各种逻辑运算Thread.sleep(10000);//线程睡眠}按照楼主的方式这样会不会好一点呢?把声明放在外面就不用每次都去声明了。
解决方案:
能用定时器吗?
解决方案:
内存资源耗尽了吧
解决方案:
引用4楼liujunshi603的回复:
引用楼主liujunshi603的回复:有个任务就是每隔10秒钟读取某个表的数据,然后再拆分读取的数据插入到别的表中。之前我使用了Timer每个十秒执行一次任务,但是后来莫名其妙的就无法初始化任务类,然后我干脆用了一个死循环while(true){Aa=newA();a.doing();//执行各种逻辑运算Thread.sleep(10000);……
有意义吗已经进了循环体还指望它能出来
解决方案:
好像还没有一个特别准确的定论。再等等
解决方案:
该回复于2010-10-22 09:35:04被版主删除
解决方案:
引用9楼bao110908的回复:
哈哈,楼主太可爱了,竟然跑了两天,呵呵。如果任务每10秒执行一次用不着使用这么消耗系统资源的方式,楼主可以去看一下:java.util.concurrent.ScheduledExecutorService这个接口
哈哈,我有一个需求就是用的这个,可以有任务队列哟。死循环不太好
解决方案:
引用16楼cl61917380的回复:
跑了两天!!
哈哈,换台更好点的机子试试看看能跑几天
解决方案:
引用12楼boyone2009的回复:
没有问题的,只要不出现异常线程会一直跑下去。不过最好设个标志,像4楼说的,不过最好是:booleanflag=....;while(flag){}这样就可以控制什么事侯去停掉线程。
直接这样的话最后内存溢出...