1

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

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

つまり、セッションがExecutorServiceであり、mySocketがFileManagerが要求をリッスンしているソケットである場合、各スレッドの作成は次のようになります。

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

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

問題は、特定のファイルをアップロードしているスレッドの数/スレッドを追跡するにはどうすればよいかということです。

4

1 に答える 1

1

転送する各ファイル名に関連付けられたCountDownLatchを使用できます。平均スレッドは、ラッチでawait()を試行し、ラッチを取得したときにのみ処理を開始する必要があります。子は、完了時にcountDown()を使用する必要があります。

于 2011-05-09T01:17:08.890 に答える