【发布时间】:2010-12-17 00:23:56
【问题描述】:
我正在使用 Commons Net FTPClient 类定期轮询 ftp 站点并尝试下载文件。有时线程在尝试从站点读取时会无限期阻塞,我想知道是否有其他人遇到过这个问题并且可以提供任何解决方法?
我正在使用FTPClient 的retrieveFileStream(String) 方法来获取InputStream 的句柄,然后我尝试从中读取。下面是被阻塞线程的部分堆栈跟踪。
"FTP File Poll Thread" prio=10 tid=0x083b0800 nid=0x6324 runnable [0x65b5b000..0x65b5beb0]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
- locked <0x5c851928> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at java.io.PushbackInputStream.read(PushbackInputStream.java:122)
at org.apache.commons.net.io.FromNetASCIIInputStream.__read(FromNetASCIIInputStream.java:75)
at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:170)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
【问题讨论】:
-
这是一个非常普遍的问题,Java 中阻塞 I/O 的问题,事实上没有办法避免它或杀死线程。
-
我就是这么想的 :-( 我希望那里有一个非阻塞的 FTP 客户端。
标签: java ftp ftp-client apache-commons-net