这是我实现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方法中的print可以访问变量,而在主类中则不能。这与run()方法停止并且无法访问其内容有关吗?
最佳答案
您有两个主要问题
跑步时
bingThread.start();
System.out.println(sdBing.getUrlLink());
您假设
Thread
已启动并且已经为bingSeed
分配了一个值-可能不是这种情况,因此在调用getUrlLink
之前,请确保通过添加Thread
完成bingThread.join();
其次,要确保使用
bingSeed
的最新值,请使其可变,如private volatile String bingSeed;