2

個人的なプロジェクトの一環として、IRC ボットを作成しています。私の最初の試みは、1 つのメイン クラスですべての作業を行うことでしたが、あまり効率的ではありませんでした。そのため、IRC 部分をボットから分離し、サーバーに接続し、自身を認証し、参加する非常に単純な IRC クライアントを作成することにしました。チャンネルと受信ライン。

次に、IRC クライアントが受信した各行を処理するか、クライアントをスレッドに入れて、行をキューまたはマップに配置します (行の種類によって異なります)。スレッド オプションは、より適切でやりがいがあるようです。

ボットは IRC クライアントが受信した行にアクセスする必要があるため、ボットがアクセスできるパブリック静的キューに行を入れることを考えましたが、C のグローバル変数を思い出しました。このフィールドにアクセスします。public static フィールドを使わずに、IRC クライアントに仕事をさせ、bot がラインでピークに達するようにする方法はありますか?

回線が利用可能になったときにボットに通知されるように、IRC クライアントに同期方式で回線を配信させることを考えました。

4

1 に答える 1

3

静的フィールドを使用せずに、2つ(またはそれ以上)のスレッド間で状態を共有できます。例えば:

    public class State {
        private final Queue queue = ...
        private final Object somethingElse =
        // getters and setters
    }

    public static void main(String[] args) {
        State state = ...
        new thread(new IRC(state)).start();
        new thread(new Bot(state)).start();
    }

IRC次に、Botクラスを定義して実装し、インスタンスを引数としてRunnable取るコンストラクターを提供します。Stateもちろん、共有状態での操作は適切に同期する必要があります。

于 2012-06-16T13:36:41.620 に答える