gpt4 book ai didi

java - 为什么主线程被阻塞

转载 作者:行者123 更新时间:2023-12-02 05:08:01 24 4
gpt4 key购买 nike

谁能告诉我为什么下面发布的代码会阻塞主线程?

loadFile 方法启动一个工作线程来加载一个巨大的日志文件,该文件可能需要 10 秒才能加载。当我运行程序时,负责启动文件线程的按钮会卡住,直到文件加载并且文件线程完成其工作。

此外,在调用 loadFile 方法之后的三行中,我尝试显示类似“正在加载...”的内容,并且只要文件或其线程未加载尚未完成工作,我会显示相同的文本“正在加载......”并带有额外的点,直到文件线程/工作线程终止。

请告诉我为什么下面的代码会阻塞主线程,以及如何实现显示文本,通知用户文件仍在加载,并在文本末尾添加额外的点。

我希望我的问题很清楚。

if ( (this.client != null) &&  (this.client.isConnected()) ) {
System.out.println("Client is connected to a broker.");
statusarea.append(Log.w(TAG, "preLoadSystemChecks", "Client Connected") + "\n");
loadFile();
StringBuilder sb = new StringBuilder(".");
statusarea.append(Log.i(TAG, "preLoadSystemChecks", "Loading measurements file.") + "\n");
statusarea.append(Log.i(TAG, "preLoadSystemChecks", "Loading" + sb) + "\n");
while ( (this.fileThread != null) && (this.fileThread.getState() != State.TERMINATED) ) {
sb.append(".");
}

LoadFile():

protected void loadFile() throws MqttException {
// TODO Auto-generated method stub
statusarea.append(Log.d(TAG, "loadFile", "File is loaded") + "\n");
if (this.fileThread == null) {
fileThread = new Thread(fileProcessinRunnable, FILE_THREAD);
fileThread.start();
}
}

最佳答案

您的 while 循环阻塞主线程,直到加载线程终止:

while ( (this.fileThread != null) && (this.fileThread.getState() != State.TERMINATED) ) {
sb.append(".");
}

(请注意,简单地将点附加到 StringBuilder 不会导致任何地方显示任何内容。)

关于java - 为什么主线程被阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27602185/

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