gpt4 book ai didi

java - 线程启动()方法后无法访问变量

转载 作者:行者123 更新时间:2023-11-29 04:27:33 24 4
gpt4 key购买 nike

所以这是我实现 Runnable 的类的代码。

public class SeedDownload implements Runnable {

private StringBuilder htmlSB;
private String bingSeed;

public SeedDownload(StringBuilder string) {
htmlSB = string;
}

public void run() {
Pattern pattern = Pattern.compile("class=\"b_algo\"><h2><a href=\"(.+?)\" h=\"");
Matcher matcher = pattern.matcher(htmlSB);

if (matcher.find()) {
bingSeed = matcher.group(1);
System.out.println(bingSeed);
}
} //End of run

public String getUrlLink() {
return bingSeed;
}

}

这是我的主类中的代码。

StringBuilder htmlResult = PageRead.readPage(String.format("https://bing.com/search?q=%s", query));
System.out.println(htmlResult);
SeedDownload sdBing = new SeedDownload(htmlResult);
Thread bingThread = new Thread(sdBing);
bingThread.start();

System.out.println(sdBing.getUrlLink());

这是运行时的输出。

"空

https://en.wikipedia.org/wiki/Hello_world_program "

显然,run 方法中的打印可以访问变量,而在主类中则不能。是否与 run() 方法被停止并且无法访问其内容有关?

最佳答案

你有两个主要问题

运行的时候

 bingThread.start();
System.out.println(sdBing.getUrlLink());

你假设 Thread 已经启动并且已经为 bingSeed 分配了一个值 - 这可能不是这种情况,所以在调用 getUrlLink 通过添加

确保 线程已经完成
bingThread.join();

其次,要确保使用bingSeed最新 值,使其变得不稳定,如

private volatile String bingSeed;

关于java - 线程启动()方法后无法访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45499956/

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