gpt4 book ai didi

java - 使用线程时,我绝对必须使用静态变量吗?

转载 作者:行者123 更新时间:2023-12-03 12:56:36 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

您可以在两个(或更多)线程之间共享状态,而无需使用静态字段。例如:

    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 的构造函数实例作为参数。当然,对共享状态的操作需要适本地同步。

关于java - 使用线程时,我绝对必须使用静态变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11063683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com