私はUSBスティックで動作するJavaアプリケーションを開発中です。サーバーからスティックに複数のファイルをダウンロードし、解読します。各ファイルはそれぞれのスレッドで処理されます。以前の実装のバグのために、スレッド数に制限はなく、ファイル数が十分に多くなったときにいくつかのファイルのサイズが0KBになってしまいました(テストでは、26個の小さなファイルがそれぞれ数KBでした) 。この分析では、ファイルが空であったためにダウンロードが失敗した、すなわち解読が何もしなかったことが示されている。このケースでのダウンロードに失敗した典型的な数は6でした。例外は記録されていません。私はまた、コンピュータ上で直接実行されているアプリケーションとそこにダウンロードされているファイルを使ってプロセス全体をテストしましたが、このケースでは(Windows 7とSSDドライブを使用して)この問題は発生しませんでした。JavaのUSBスティックへの並列ファイルのダウンロード
スレッド10個の固定スレッドプールに切り替えると、問題が消えているようです。しかし、私はこの問題が将来、ある時点で再現されないようにしたいと思っていますが、スレッドプールを維持したいのは、プロセス全体を明確にスピードアップするからです。問題は、あまりにも多くのスレッドを使用していないことを確認する方法です。この実装はUSB 2.0と3.0の両方で動作するはずです。