gpt4 book ai didi

java - 如何处理两个线程同时使用的变量?

转载 作者:行者123 更新时间:2023-12-01 14:39:13 27 4
gpt4 key购买 nike

一个线程不断读取从 BufferedReader 接收的字节。数据来自SerialPort

在主线程上,有一个 JMenuItem,当单击它时,串行端口将关闭,BufferedReader 应停止接收消息。

问题是:

如果我在读取消息时尝试关闭,应用程序将卡住,并且串行端口不会关闭,直到端口停止发送消息。

所以基本上,我应该在关闭串行端口之前关闭阅读器。如果我这样做,有时我会得到一个空指针异常,因为我在读取缓冲读取器时关闭了它。

如何解决这个问题?

最佳答案

听起来您可以使用阅读器类中的 stop 方法(从菜单项的 click 事件调用)来修复此问题

private boolean isStopped = false;

public void stop() {
isStopped = true;
}

while(bufferedReader.isReady()) {
bufferedReader.read();
if(isStopped) {
bufferedReader.close();
}
}

这样可以确保在所有 read 调用完成之前不会调用 close

关于java - 如何处理两个线程同时使用的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156558/

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