現在在做一個多線程與Socket配合的問題﹐現在在接受數據端老是過2到3個小時就有一條線程死掉﹐還有兩個類一個是界面啟動線程的﹐一個是對接收數據處理﹐這段程試是兩個死循環﹐外循環是不斷監聽是否有數據傳過來﹐內循環是在數據庫里搜索數據什么處理完并返回信息。望高手能給我點意見﹐不勝感激﹗ public void run()
{
try
{
String readMess="";
client=null;
in=null;
out=null;
client =new Socket(ip,port);
//client =new Socket("10.242.10.75",4660);
System.out.println(line+" CONNECTION OK!");
out = new DataOutputStream(client.getOutputStream());
in = new DataInputStream(client.getInputStream());
flag=true;
while(true)
{
/*
if(in.available()==0)
{
//break;
continue;
}
*/
System.out.print(line);
System.out.println(client.isConnected());
readMess=in.readLine().trim();
//System.out.println(readMess);
if(readMess.equals("")||readMess==null)
{
System.out.println("while end!");
break;
}
else
{
if(!client.isConnected())
{
System.out.println(line+" is no connection!");
}
id=trans.getID(readMess);
strData=trans.getData(readMess);
//System.out.println(id+" data= "+strData);
insert_RCV_Data(strData,id);
int count=0;
while(true)
{
int getflag=get_send_flag(id);
if(getflag==0)
{
sleep(150);
count++;
if(count==20)
{
try
{
Statement stmt=con.createStatement();
String strsqlupdate="update SYS_DATA_CHANNEL set flag=4 where id="+id+" and flag=0";
stmt.executeUpdate(strsqlupdate);
stmt.close();
} catch(Exception ex)
{
System.out.println("errorUpdate : "+ex.getMessage());
}
break;
}
}
else if(getflag==1||getflag==2)
{
trans.sendData(out,strData,id,false);
this.data.insertElementAt("ID:"+id+" Data:"+strData,0);
get_send_Data();
break;
}
}
}
}
}
catch(Exception e)
{
System.out.println(ip+" Thread run error :"+e.getMessage());
}
}
{
try
{
String readMess="";
client=null;
in=null;
out=null;
client =new Socket(ip,port);
//client =new Socket("10.242.10.75",4660);
System.out.println(line+" CONNECTION OK!");
out = new DataOutputStream(client.getOutputStream());
in = new DataInputStream(client.getInputStream());
flag=true;
while(true)
{
/*
if(in.available()==0)
{
//break;
continue;
}
*/
System.out.print(line);
System.out.println(client.isConnected());
readMess=in.readLine().trim();
//System.out.println(readMess);
if(readMess.equals("")||readMess==null)
{
System.out.println("while end!");
break;
}
else
{
if(!client.isConnected())
{
System.out.println(line+" is no connection!");
}
id=trans.getID(readMess);
strData=trans.getData(readMess);
//System.out.println(id+" data= "+strData);
insert_RCV_Data(strData,id);
int count=0;
while(true)
{
int getflag=get_send_flag(id);
if(getflag==0)
{
sleep(150);
count++;
if(count==20)
{
try
{
Statement stmt=con.createStatement();
String strsqlupdate="update SYS_DATA_CHANNEL set flag=4 where id="+id+" and flag=0";
stmt.executeUpdate(strsqlupdate);
stmt.close();
} catch(Exception ex)
{
System.out.println("errorUpdate : "+ex.getMessage());
}
break;
}
}
else if(getflag==1||getflag==2)
{
trans.sendData(out,strData,id,false);
this.data.insertElementAt("ID:"+id+" Data:"+strData,0);
get_send_Data();
break;
}
}
}
}
}
catch(Exception e)
{
System.out.println(ip+" Thread run error :"+e.getMessage());
}
}
解决方案 »
- 希望此贴能彻底结束JAVA参数传递的问题
- 对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中?
- JAVA SQL语句嵌入
- Runtime.getRuntime().exec(file) 急!
- 按位与的简单问题(计算器和程序里结果不一样!)
- 狂晕的菜鸟问题,什么函数把字符串的空字符过滤,类似C++的Trim()
- 如何得到命令的输出信息
- 大家好,帮小弟一把!(50分相送)
- VisualAge3.0中文企业版是不是必须是jre1.17才行??
- 有谁能帮我解决JEditPane对中文页面的支持问题
- DES对字符串的加密问题
- JAVA 和本地相关信息的获取问题(后续)
急死人了﹗