这是我实现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;

07-26 09:23
查看更多