2011-05-08 4 views
1

Javaでは、ファイルのディレクトリを保持し、要求に応じて他のFileManagerにアップロードするFileManagerを作成しようとしています。アップロード要求が(ソケットを介して)到着するたびに、要求されたファイルのアップロードを処理するための新しいスレッドが作成されます。異なるスレッドでアップロードされているファイルを追跡する

私はこれに対処するためにExecutorServiceFileUploader implements Runnableを使用することを考えていました。

セッションがExecutorServiceのとmySocketがFileManagerのは、上の要求をリッスンしているソケットである場合、各スレッドの作成のようなものになるだろう、すなわち:

sessions.execute(new FileUploader(mySocket.accept())); 

問題はFileManagerのコマンドを取得する場合ということですデータベース内のファイルの名前を変更するには、ファイルの名前を変更する前に、現在ファイルをアップロードしているすべてのスレッドが終了するまで待つ必要があります。

どのように多くの/どのスレッドが特定のファイルをアップロードしているかを把握するにはどうすればよいですか?

+1

実際には、Linuxではファイルの読み書き中に名前を変更できますもう片方のスレッドは正常に動作し続けます(ファイルハンドルを使用している限り、ファイルを閉じて再オープンするような気がしません)。 –

答えて

1

転送する各ファイル名に関連付けられたCountDownLatchを使用できます。あなたの平均スレッドはラッチで待ち()し、ラッチが得られたときにのみ処理を開始し、あなたの子供はcountDown()を使うべきです

関連する問題