当前位置: 技术问答>java相关
溢出的问题,紧急!!!高手快来呀!!!
来源: 互联网 发布时间:2015-08-27
本文导语: 现在有这样个程序,运行一段时间后就会出现溢出的问题,请问该如何解决. import aiismg.jcmppapi.CMPPAPI; import aiismg.jcmppapi.CMPPDeliverResp; import java.io.*; import java.net.*; public class RecvSM { //接收短信 public static v...
现在有这样个程序,运行一段时间后就会出现溢出的问题,请问该如何解决.
import aiismg.jcmppapi.CMPPAPI;
import aiismg.jcmppapi.CMPPDeliverResp;
import java.io.*;
import java.net.*;
public class RecvSM { //接收短信
public static void main( String argv[] )
{
int nTimeout = 5; //每次超时时间(秒)
int nSleep = 1; //每次等待时间(秒)
CMPPAPI pCMPPAPI = new CMPPAPI();
while(true)
{
try
{
Thread.sleep(nSleep*1000);
} catch(Exception e){}
CMPPDeliverResp theDeliverResp = new CMPPDeliverResp();
if( pCMPPAPI.CMPPDeliver( nTimeout, theDeliverResp ) != 0 ) {
if(pCMPPAPI.GetErrCode()==0){
System.out.println("waiting for sms!!!");
}else{
System.out.println("receive fail");
}
continue;//如果出错,就接收下一条短信
}
(new TransactTread(theDeliverResp)).start();//启动线程处理业务
}
}
}
class TransactTread extends Thread{
CMPPDeliverResp dr;
public TransactTread(CMPPDeliverResp _dr)//构造函数
{
dr = _dr;
}
public void run()
{
try {
//进行短信处理,短信内容
}
} catch(Exception e){ }
}
}
这里面出现溢出主要是运行while(true)那里发生的,请问是什么问题,出错的信息为
Exception in thread "main" java.lang.OutOfMemoryError
请高手帮忙解决,分一定给!!!
import aiismg.jcmppapi.CMPPAPI;
import aiismg.jcmppapi.CMPPDeliverResp;
import java.io.*;
import java.net.*;
public class RecvSM { //接收短信
public static void main( String argv[] )
{
int nTimeout = 5; //每次超时时间(秒)
int nSleep = 1; //每次等待时间(秒)
CMPPAPI pCMPPAPI = new CMPPAPI();
while(true)
{
try
{
Thread.sleep(nSleep*1000);
} catch(Exception e){}
CMPPDeliverResp theDeliverResp = new CMPPDeliverResp();
if( pCMPPAPI.CMPPDeliver( nTimeout, theDeliverResp ) != 0 ) {
if(pCMPPAPI.GetErrCode()==0){
System.out.println("waiting for sms!!!");
}else{
System.out.println("receive fail");
}
continue;//如果出错,就接收下一条短信
}
(new TransactTread(theDeliverResp)).start();//启动线程处理业务
}
}
}
class TransactTread extends Thread{
CMPPDeliverResp dr;
public TransactTread(CMPPDeliverResp _dr)//构造函数
{
dr = _dr;
}
public void run()
{
try {
//进行短信处理,短信内容
}
} catch(Exception e){ }
}
}
这里面出现溢出主要是运行while(true)那里发生的,请问是什么问题,出错的信息为
Exception in thread "main" java.lang.OutOfMemoryError
请高手帮忙解决,分一定给!!!
|
不断的new Thread会造成这种问题,其实只要换种设计模式可以达到同样的功能。
import java.util.*;
class TransactTread extends Thread{
private LinkedList deliverRespList = new LinkedList ();
public TransactTread()//构造函数
{
}
public void run()
{
CMPPDeliverResp dr=null;
for(;;) {
synchronized(deliverRespList) {
while( deliverRespList.size == 0 )
deliverRespList.wait();
dr = (CMPPDeliverResp)deliverRespList.removeFirst();
}
try {
//进行短信处理,短信内容
}
} catch(Exception e){ }
}
}
public void addDeliverResp(CMPPDeliverResp dr) {
synchronized(deliverRespList) {
deliverRespList.add(dr);
try{
deliverRespList.notify();
}catch(Exception e ) {}
}
}
}
在主类中定义成员 TransactTread transactTread = new TransactTread ();
并把它启动。
把你主程序中的
(new TransactTread(theDeliverResp)).start();//启动线程处理业务
换成transactTread.addDeliverResp(theDeliverResp);
import java.util.*;
class TransactTread extends Thread{
private LinkedList deliverRespList = new LinkedList ();
public TransactTread()//构造函数
{
}
public void run()
{
CMPPDeliverResp dr=null;
for(;;) {
synchronized(deliverRespList) {
while( deliverRespList.size == 0 )
deliverRespList.wait();
dr = (CMPPDeliverResp)deliverRespList.removeFirst();
}
try {
//进行短信处理,短信内容
}
} catch(Exception e){ }
}
}
public void addDeliverResp(CMPPDeliverResp dr) {
synchronized(deliverRespList) {
deliverRespList.add(dr);
try{
deliverRespList.notify();
}catch(Exception e ) {}
}
}
}
在主类中定义成员 TransactTread transactTread = new TransactTread ();
并把它启动。
把你主程序中的
(new TransactTread(theDeliverResp)).start();//启动线程处理业务
换成transactTread.addDeliverResp(theDeliverResp);
|
no problem
zhengy@necas.nec.co.jp
zhengy@necas.nec.co.jp
|
在while(true)里面不断地
CMPPDeliverResp theDeliverResp = new CMPPDeliverResp();
new TransactTread(theDeliverResp)).start();
怎么可能不溢出??
while(true)应该写到线程的run里面,而不是main方法里面
你参考一下线程的用法
CMPPDeliverResp theDeliverResp = new CMPPDeliverResp();
new TransactTread(theDeliverResp)).start();
怎么可能不溢出??
while(true)应该写到线程的run里面,而不是main方法里面
你参考一下线程的用法
|
你把
CMPPDeliverResp theDeliverResp = new CMPPDeliverResp();
(new TransactTread(theDeliverResp)).start();
两句拿到循环外面试试
CMPPDeliverResp theDeliverResp = new CMPPDeliverResp();
(new TransactTread(theDeliverResp)).start();
两句拿到循环外面试试