2010-12-07 22 views
2

言語はJavaで、ポート上でリッスンしているアプリケーションがあり、このアプリケーションはマルチスレッドであり、スレッドをThreadLocalsセットに保持しています。ファイルを転送して転送するソケットを開くことでできます。私はソケットを開き、それを特定のスレッドに渡しますか?アプリケーションは、ソケット間でXインタフェースの特定のシリアライズ可能オブジェクトをすでに転送しています。ソケットストリーム書き込み

答えて

1

私はPeterに同意します。しかし、あなたが戻ってきた場合、あなたのデザインを検証し、あなたが本当にこれを必要としていると決めました。あなたが次のようにそれを行うことができると思います。

スレッドに何らかの指示を追加する必要があります。スレッド1、スレッド2、スレッド3などを呼び出すとします。クライアントから送信される各コマンドには、専用のスレッドIDが含まれている必要があります。リスニングスレッドはこの値を抽出し、特定のスレッドにタスクを送信する必要があります。自分で必要な既存のスレッドプールを使用してスレッドプールを使用できるかどうかはわかりません。しかし、あなたのスレッドプールがシンプルである(つまり、スレッドの数を動的に変更していないなど)場合は、独自のスレッドプールを作成するのに10コード行だけです:List<Thread>のスレッドのリストを作成し、それを書き込むループを書く:threads.add(new Thread())

各スレッドは、Runnableの独自のキューで待機する必要があります。新しいタスクがThread #nに到着したら、runnableを作成して対応するキューに入れてください。

+0

この考えのために、クライアント/サーバー間のスレッド通信を追跡したテーブルを作成した後に、年齢を追加したいだけです。 – hephestos

0

ワーカースレッドを持っている最も簡単な方法は、(必要であればまたはプール)単一スレッドであるExecutorServiceのを使用することですあなたはそれに

ExecutorService executor = Executors.newSingleThreadExecutor(); 

executor.execute(new Runnable() { ... }); 

executor.shutdown(); 

ないのはなぜあなたがスレッドを維持すると確信してタスクを与えることができますin ThreadLocal変数。おそらく、あなたの設計から一歩を踏み出し、より簡単な方法でこれを行うことができるかどうかを尋ねる時が来ました。

+0

なぜ皆さんはJavaのThreadLocalsを嫌いですか? – hephestos