在使用线程时,我是否必须使用静态变量?

时间:2012-06-16 13:05:50

标签: java multithreading

作为个人项目的一部分,我正在制作IRC bot。我的第一次尝试是让一个主类完成所有工作,但效率不高,所以我决定将IRC部分与机器人分开,制作一个非常简单的IRC客户端,连接到服务器,验证自己,加入通道和接收线。

然后我可以在IRC客户端接收它时处理每一行,或者将客户端放在一个线程中,它将这些行放入队列或映射中(取决于它是什么类型的行)。线程选项似乎更合适且具有挑战性。

由于机器人需要访问IRC客户端收到的行,我想把这些行放在机器人可以访问的公共静态队列中,但这让我想起C中的全局变量,我发现它很奇怪因为每个人都可以访问此字段。有没有办法可以让IRC客户端完成它的工作,机器人在没有公共静态字段的情况下达到峰值?

我想让IRC客户端使用同步方法传递线路,以便在线路可用时通知机器人。

1 个答案:

答案 0 :(得分:3)

您可以在不使用静态字段的情况下在两个(或更多)线程之间共享状态。例如:

    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();
    }

然后定义IRCBot类来实现Runnable,并为它们提供以State实例作为参数的构造函数。当然,共享状态的操作需要适当地同步。