我在程序里实现了一个线程池,这个线程池构造时创建WorkThread(extends Thread),WorkThread负责从线程池里取Task,然后执行这个Task。
然后,我的监听器执行
ServerSocket sc;
sc = new ServerSocket(5600);
while (true) {
//MDPBeanFactory.isReceiveFinished是获取一个开关变量,当receive接收完成时这个值返回true
if(MDPBeanFactory.isReceiveFinished()){
//pool是一个线程池管理对象,addTask是往线程池里增加一个线程
pool.addTask(new AnotherTask());
}else{
Socket socket = null;
socket = sc.accept();
pool.addTask(new ReceiveTask(socket));
}
}
当有Client通过Socket向Server发送数据时,监听器就会创建一个新ReceiveTask(implements Task)对象,并放到线程池里,WorkThread就会执行这个Task。Client发送完成之后,发送一个标识"finish",ReceiveTask收到后,会将Socket.Close();
ReceiveTask的执行代码:
while (!socket.isClosed()) {
ObjectInputStream inStream = null;
try{
inStream = new ObjectInputStream(socket.getInputStream());
String temp = (String)inStream.readObject();
if (!temp.equals("finish"))
System.out.println(temp);
else{
System.out.println(temp);
socket.close();
System.out.println(socket.isClosed());
//给一个状态开关设置为True,打算在监听器那里监听到为true就创建另一个Task
MDPBeanFactory.setReceiveFinished(true);
}
}catch(IOException e){
socket.close();
}
}
现在的问题是:
1. 当ReceiveTask接收到"finish"之后,执行了socket.Close(),然后在Debug时,发现此socket.isClosed()仍然是true!?(我怀疑监听在socket.accept()时,再次将这个socket开了?)
2. 上面的代码没有办法执行到pool.addTask(new AnotherTask());,因为也是socket.accept()那里被阻塞了,我应该怎么办?
这个问题今天闹了一天了,search了一堆都没有相关的解决方法,发到这里,希望大家能吧。谢谢谢谢~~~
分享到:
- 2007-08-10 16:10
- 浏览 3642
- 评论(4)
- 论坛回复 / 浏览 (3 / 8880)
- 查看更多
相关推荐
很抱歉,根据您提供的信息,"公式求教共4页.pdf.zip"似乎是一个包含四页公式教学内容的PDF文档的压缩文件,而"赚钱项目"可能是压缩包中的另一个文件或者是一个误输入。然而,没有实际的文件内容,我无法提供具体的IT...
标题中的“extjs文件浏览框问题求教”表明这是一个关于ExtJS框架中文件选择或浏览功能的编程问题。ExtJS是一个流行的JavaScript库,用于构建富客户端应用程序,它提供了丰富的组件库,包括文件浏览框(FileBrowser)...
S函数最大功率跟踪采用的是三次插值方法求教指出错误-mppt.mdl 这是仿真模型和错误原因图 附件: sfun_mppt.m S函数程序 mppt.mdl 插值仿真模型 错误.jpg ...
#### 标题解析:“求教C++等等一系列的问题” 这一标题表明了提问者对于C++及可能的其他编程技术存在疑问。C++是一种广泛应用于系统软件开发、游戏开发等多个领域的高级编程语言。对于初学者来说,掌握C++不仅能够...
最优化问题在计算机科学和工程领域中广泛应用,例如在机器学习、数据分析、运筹学等领域。这道编程问题要求我们解决一个带有约束条件的最优化问题,采用的是拉格朗日乘子法和牛顿法相结合的方法。 首先,我们要理解...
卡尔曼滤波求教-chap1_27.mdl 在看关于卡尔曼滤波的东西,下面是在教程上看到的一个实例,仿真结果也没有问题,但是输出的结果都是关于变量Y(n)的,我想问一下有没有办法可以显示出X(n)的变化过程,谢谢
求教电力系统仿真-039THDAT.DAT 小弟要做毕业设计,才对matlab入门。现在要用matlab仿真一个39-bus的电力系统在一个故障(如其中一条母线三相短路)清除后的一小段时间,各种发电机的功角特性图,请大神告知详细...
卡尔曼滤波求教-chap1_27f.m 在看关于卡尔曼滤波的东西,下面是在教程上看到的一个实例,仿真结果也没有问题,但是输出的结果都是关于变量Y(n)的,我想问一下有没有办法可以显示出X(n)的变化过程,谢谢
所以来求教,关于非线性系统的T-S模糊辨识,广义输入向量的选择问题,模型阶数确定问题,能不能不用试验的方法,我的是四入四出系统。。。,而且辨识完成后,还要做预测控制。而且关于,数据是否需要归一化处理的问题...
asp调试的问题
求教现在的主流3D网络游戏开发都使用哪些技术.doc
Socket管理在IT行业中是网络编程的一个重要组成部分,主要用于实现客户端和服务器之间的通信。"socketManage"这个主题聚焦于一个简单的Socket实例代码,旨在帮助我们理解如何在实际项目中运用Socket进行数据传输。在...
卡尔曼滤波求教-chap1_27plot.m 在看关于卡尔曼滤波的东西,下面是在教程上看到的一个实例,仿真结果也没有问题,但是输出的结果都是关于变量Y(n)的,我想问一下有没有办法可以显示出X(n)的变化过程,谢谢
S函数最大功率跟踪采用的是三次插值方法求教指出错误-sfun_mppt.m 这是仿真模型和错误原因图 附件: sfun_mppt.m S函数程序 mppt.mdl 插值仿真模型 错误....
【标题】:“我求教高手的VB毕业设计” 在VB(Visual Basic)中进行数据库操作是常见的编程任务,尤其是在毕业设计项目中。VB提供了一种简单的方式来与数据库交互,特别是像Access这样的桌面数据库管理系统。当你在...