0

単純なバージョンのTCPを実装していますが、マルチスレッド技術が不足しています。メインスレッドは2つのサブスレッドを制御します。

1.タイマー(時間をカウントダウンし、タイムアウトした場合は、メインスレッドに再度ジョブを実行するように通知します)

2.着信パケットをリッスンし、永久ループします。パケットを受信した場合は、メインスレッドのデータを更新します

メインスレッドは、特定のシグナルが発生したときにアクションを実行する必要があります。

私はイベント処理の経験がなく、メインスレッドに通知するためのシグナルを設計しています。どこから始めればいいですか?たとえば、サブスレッドはメインスレッドのプライベートフィールドを更新します。または、イベントを作成する必要がありますか?

メインスレッドの擬似コードは次のとおりです。

while(true){
  event: send data ,then ...
  event: timeout , then send packet again
  event: packet received, then update data in private filed 
}
4

1 に答える 1

1

Javaでのマルチスレッドの概念に慣れていない場合は、最初にこのチュートリアルを読むことをお勧めします:http: //docs.oracle.com/javase/tutorial/essential/concurrency/

特定の問題について話し合うには、2つのスレッドが必要です。1つはソケットをリッスンするためのもので、スレッドを拡張します。構築時にメインオブジェクトへの参照を受け取り、ソケットをリッスンし続ける必要があります。何かが到着すると、このスレッドはメインオブジェクトの処理ルーチンを呼び出してアクションを実行します。ビジーウェイトにのみ注意してください-ソケットの準備ができていない間、しばらくの間降伏してください。-タイマーはTimerTaskの拡張である可能性があります。詳細については、http://www.cloudhadoop.com/2012/01/timers-in-java-create-timer-in-java.htmlを参照してください。

于 2012-05-25T12:44:27.543 に答える