2009-11-16 42 views
1

我使用Commons Net FTPClient類來定期輪詢ftp站點並嘗試下載文件。有時線程會在嘗試從網站讀取時無限期地被阻止,我想知道是否有其他人遇到了這個問題並可以提供任何解決方法?檢測或防止Commons Net FTPClient在讀取時阻塞

我正在使用FTPClientretrieveFileStream(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) 
+0

這是一個非常普遍的問題,即阻塞Java中的I/O,以及無法避免它或殺死線程的事實。 – skaffman 2009-11-16 12:07:04

+0

這就是我的想法:-(我希望在那裏有一個非阻塞的FTP客戶端。 – Adamski 2009-11-16 12:48:24

回答

0

我結束了使用這裏的雜牌是計劃任務如果FTP操作比X秒需要較長的時間發出警報。我確實在Sourceforge上找到javanioftp,但在我的情況下,它不保證切換客戶端的開發開銷。

0

java.io是阻塞的,您需要使用java.nio包。從來沒有用java.nio使用過ftp,但認爲它必須工作,因爲http可以使用java.nio。

問候