我在程序里实现了一个线程池,这个线程池构造时创建WorkThread(extends Thread),WorkThread负责从线程池里取Task,然后执行这个Task。
然后,我的监听器执行
[code]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));
}
}[/code]
当有Client通过Socket向Server发送数据时,监听器就会创建一个新ReceiveTask(implements Task)对象,并放到线程池里,WorkThread就会执行这个Task。Client发送完成之后,发送一个标识"finish",ReceiveTask收到后,会将Socket.Close();
ReceiveTask的执行代码:
[code]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();
}
}[/code]
现在的问题是:
1. 当ReceiveTask接收到"finish"之后,执行了socket.Close(),然后在Debug时,发现此socket.isClosed()仍然是true!?(我怀疑监听在socket.accept()时,再次将这个socket开了?)
2. 上面的代码没有办法执行到pool.addTask(new AnotherTask());,因为也是socket.accept()那里被阻塞了,我应该怎么办?
这个问题今天闹了一天了,search了一堆都没有相关的解决方法,发到这里,希望大家能吧。谢谢谢谢~~~ :?
然后,我的监听器执行
[code]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));
}
}[/code]
当有Client通过Socket向Server发送数据时,监听器就会创建一个新ReceiveTask(implements Task)对象,并放到线程池里,WorkThread就会执行这个Task。Client发送完成之后,发送一个标识"finish",ReceiveTask收到后,会将Socket.Close();
ReceiveTask的执行代码:
[code]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();
}
}[/code]
现在的问题是:
1. 当ReceiveTask接收到"finish"之后,执行了socket.Close(),然后在Debug时,发现此socket.isClosed()仍然是true!?(我怀疑监听在socket.accept()时,再次将这个socket开了?)
2. 上面的代码没有办法执行到pool.addTask(new AnotherTask());,因为也是socket.accept()那里被阻塞了,我应该怎么办?
这个问题今天闹了一天了,search了一堆都没有相关的解决方法,发到这里,希望大家能吧。谢谢谢谢~~~ :?