私は現在32スレッドを使用してスレッドごとに1ファイル(32個の.txtファイル)を読み込むプログラムを作成しました。マルチスレッドはCPUの速度とは関係ありませんが、BINGのapiへの32回の呼び出しは1秒間に30回も高速に実行できます。検索クエリのリストを含む各.txtファイル。私はそれがファイルから一度に1行を読むスレッドを作成します。 32個のスレッドをすべて作成し、それらを単一の.txtファイルにポイントすることは可能ですか?1つのファイルを読み込むJavaマルチスレッドアプリケーション
答えて
プロデューサー/コンシューマーパターンを使用します。ファイルを読み取るスレッドを1つしか持たず、put()
を使用して各ライン/コマンドをArrayBlockingQueue(スレッドセーフな読み書き)にプッシュします。
他のすべての32スレッドは、take()
を呼び出すことによって同じキューオブジェクトから読み取る必要があります。キューが空の場合はブロックされますが、これはいいです。
このソリューションは、ディスクが本質的にシングルスレッドなので、ファイルを同時に読み取ることで多くのことを得ることができないため、このソリューションが優れています。
ありがとう、それは入力を32の別々のファイルを持つよりもずっと簡単に変更します。 – chrstahl89
ファイルを処理するコードを同期することができます。開いたファイルに書き込むたびに、書き込みして閉じます。モニターを使用して実装しても問題ありません。
スレッドセーフであるため、java util loggingも使用できます。ハンドラを実装する場合は、スレッドの安全性の問題を処理するために、ロギングAPIが必要です。
質問には書かれていませんが、これはロギングとは関係ありません。 –
これらのスレッドの実装方法によって異なります。それぞれのファイルに独自のリーダーまたは入力ストリームがある場合、おそらく並行読み込みにはあまり問題はありません。 OS上のJVM実装が、入力ストリームがオープンされたときに暗黙的にファイルをロックし、ロックをストリーム間で共有できない場合を除きます。
しかし、正直言って、あなたは多くの不必要な作業をしています。ファイルへのアクセスを別のクラスにカプセル化し、そのインスタンスをスレッドに渡してから、そのクラスに必要な並行処理をさせるほうがずっと良いでしょう。
- 1. JAVA-ファイル1の読み込みエラー(エラー)
- 2. ファイルを1行ずつ読み込むときのパフォーマンス対ファイル全体を読み込むときの比較
- 3. ファイルからツリーマップを読み込む(Java)?
- 4. ファイルから読み込み、Javaのファイルに書き込む
- 5. レベルを1つに読み込む5.5.0f3
- 6. 複数のチャンクを1つのファイルに保存/読み込む?
- 7. 多くのファイルを1つの配列に読み込む - Python
- 8. Java: "\ n"を無視して1行ずつファイルを読み込む方法
- 9. PyQt4新しいUIファイルを1つのメインウィンドウに読み込む
- 10. tomlファイルから読み込むjava
- 11. マルチスレッドアプリケーションでファイルにログを書き込む
- 12. ファイルを1行ずつ読み込んでJavaプログラムを実行
- 13. javaを使用してファイルからすべてのリンクを1つ1つ(webcrawling)読み込む方法?
- 14. Javaの読み込みファイル
- 15. ファイルを読み込む(FORTRAN)
- 16. ファイルを読み込むpython
- 17. pickleファイルを読み込む
- 18. require.jsで1つの言語のみを読み込むi18n
- 19. xmlファイルをJavaのjarファイルの外に読み込む
- 20. java読み込み.propertiesファイル
- 21. ファイルを読み込む> Javaで4GBのファイル
- 22. 複数のArrayListをJavaの1つのファイルに保存/読み込み
- 23. JavaのFileDescriptor .sync()の読み込み*ファイルの読み込み
- 24. ストリームを含むファイルを読み込む
- 25. ファイルから読み込む
- 26. 読み込む設定ファイル
- 27. ファイルから読み込む
- 28. Androidコンパイル済みソースからjavaファイルを読み込む方法
- 29. 1つのファイルの読み書きと1つのファイルの読み込み専用の分割vimウィンドウ
- 30. ストリームを1つずつ読み込む方法は?
私はビッグテキストファイルを解析しています。これは通常、次のように行います。1人のプロデューサがI/Oを実行し、キューに入れてからキューからジョブを取り出したいと思うほど多くのコンシューマを配置します。独自のプロデューサがtxtファイルを読み込んで、1行に1つのエントリをキューに入れることができます。 – TacticalCoder