我需要同步一个接一个地发送多个文件,但是当我通过通道发送文件然后调用ChannelFuture的await()方法时,它将引发异常:
java.lang.IllegalStateException: await*() in I/O thread causes a dead lock or sudden performance drop. Use addListener() instead or call await*() from a different thread.
这是代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.DefaultFileRegion;
import org.jboss.netty.channel.FileRegion;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
public class FileHandler extends SimpleChannelUpstreamHandler{
@Override
public void messageReceived(ChannelHandlerContext ctx,
MessageEvent e) {
FileInputStream in;
try {
in = new FileInputStream("C:\\Users\\che.jpg");
FileRegion region = new
DefaultFileRegion(in.getChannel(),0,762511);
for(int i=0;i<11;i++) {
ChannelFuture chf = ctx.getChannel().write(region);
try {
chf.await();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
我该如何构建更便利的工具,该工具将使用零拷贝同步发送多个文件?