言語はJavaで、ポート上でリッスンしているアプリケーションがあり、このアプリケーションはマルチスレッドであり、スレッドをThreadLocalsセットに保持しています。ファイルを転送して転送するソケットを開くことでできます。私はソケットを開き、それを特定のスレッドに渡しますか?アプリケーションは、ソケット間でXインタフェースの特定のシリアライズ可能オブジェクトをすでに転送しています。ソケットストリーム書き込み
答えて
私はPeterに同意します。しかし、あなたが戻ってきた場合、あなたのデザインを検証し、あなたが本当にこれを必要としていると決めました。あなたが次のようにそれを行うことができると思います。
スレッドに何らかの指示を追加する必要があります。スレッド1、スレッド2、スレッド3などを呼び出すとします。クライアントから送信される各コマンドには、専用のスレッドIDが含まれている必要があります。リスニングスレッドはこの値を抽出し、特定のスレッドにタスクを送信する必要があります。自分で必要な既存のスレッドプールを使用してスレッドプールを使用できるかどうかはわかりません。しかし、あなたのスレッドプールがシンプルである(つまり、スレッドの数を動的に変更していないなど)場合は、独自のスレッドプールを作成するのに10コード行だけです:List<Thread>
のスレッドのリストを作成し、それを書き込むループを書く:threads.add(new Thread())
。
各スレッドは、Runnable
の独自のキューで待機する必要があります。新しいタスクがThread #nに到着したら、runnableを作成して対応するキューに入れてください。
ワーカースレッドを持っている最も簡単な方法は、(必要であればまたはプール)単一スレッドであるExecutorServiceのを使用することですあなたはそれに
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() { ... });
executor.shutdown();
ないのはなぜあなたがスレッドを維持すると確信してタスクを与えることができますin ThreadLocal変数。おそらく、あなたの設計から一歩を踏み出し、より簡単な方法でこれを行うことができるかどうかを尋ねる時が来ました。
なぜ皆さんはJavaのThreadLocalsを嫌いですか? – hephestos
- 1. カサンドラ書き込みタイムアウト書き込み
- 2. 書き込みキャッシュポリシーに書き込み/フェッチを書き込む
- 3. UNIXファイルの書き込みと書き込み以外の書き込み
- 4. 書き込み
- 5. 書き込み
- 6. 書き込み
- 7. 書き込み
- 8. オブジェクトの書き込み/読み込み
- 9. arduino書き込みと読み込み
- 10. ファイル読み込みと書き込み
- 11. 同時読み込み書き込み
- 12. 書き込みデータ
- 13. 書き込みコントローラコード
- 14. ランダムディスク書き込み
- 15. 書き込みセルアレイ
- 16. ブロックレベルアトミック書き込み
- 17. 書き込みレガシービュー
- 18. エッジトリガーレジスタ書き込み
- 19. チタニウムペン書き込み
- 20. 書き込みテキストファイル
- 21. ASPX書き込み
- 22. 書き込みリスト
- 23. 書き込みCSV
- 24. 書き込みカール
- 25. 書き込みモード
- 26. ファイヤーベースアトミック書き込み
- 27. 書き込み(パイソン)
- 28. 接続ノードの書き込みノードへの書き込み?
- 29. Nettyチャンネル書き込みとフラッシュ書き込みメッセージなし
- 30. Postgresqlに書き込みを書き込みます。 BatchUpdateException?
この考えのために、クライアント/サーバー間のスレッド通信を追跡したテーブルを作成した後に、年齢を追加したいだけです。 – hephestos