当前位置: 首页 > 知识库问答 >
问题:

在Java Lambda布尔方法中获取false

王昊
2023-03-14

嗨,我有一个代码检查代理。当我运行该方法时,我总是得到false。我明白这个问题是最后一个错误。当我用println在控制台上输出它时,它也在false和true之间存在差异,但没有将正确的值作为方法的返回值返回。你能帮忙吗!如果代理联机,代码必须输出true

final ExecutorService es = Executors.newFixedThreadPool(100);

public boolean isProxyOnline(String proxyIp, int proxyPort) {

    es.submit(() -> {

        try {
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, proxyPort));
            URLConnection connection = new URL("http://www.google.com").openConnection(proxy);
            connection.setConnectTimeout(1000);
            connection.connect();
            System.out.println("true");
            return true;
        } catch (Exception e) {
            System.out.println("false");
            return false;
        }

    });
    return false;
}

共有1个答案

桑飞语
2023-03-14

但是,第一种方式不需要以这种方式将任务提交给线程池:

    public boolean isProxyOnline(String proxyIp, int proxyPort) throws ExecutionException, InterruptedException {
        Future<Boolean> submit = es.submit(() -> {
            try {
                Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, proxyPort));
                URLConnection connection = new URL("http://www.google.com").openConnection(proxy);
                connection.setConnectTimeout(1000);
                connection.connect();
                System.out.println("true");
                return true;
            } catch (Exception e) {
                System.out.println("false");
                return false;
            }
        });
        // block until the task you submitted to the thread pool completes execution and return a result(true or false). 
        return submit.get();
    }

第二种方式是,通过这种方式,该方法将立即返回future,并且您需要再次调用future#get,这是block来获取结果。

    public Future<Boolean> isProxyOnlineWithFuture(String proxyIp, int proxyPort) {
        return es.submit(() -> {
            try {
                Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, proxyPort));
                URLConnection connection = new URL("http://www.google.com").openConnection(proxy);
                connection.setConnectTimeout(1000);
                connection.connect();
                System.out.println("true");
                return true;
            } catch (Exception e) {
                System.out.println("false");
                return false;
            }
        });
    }

isProxyOnline方法的返回值与提交给线程池的任务的返回值无关。当您向线程池提交任务时,您将获得反映任务执行结果的将来值。

 类似资料:
  • 问题内容: 好的,我在代码中实现了这个SO问题:随机返回True或False 但是,我的行为很奇怪:我需要同时运行十个实例,每个实例每次运行仅返回一次true或false。令人惊讶的是,无论我做什么,每次我得到 有什么方法可以改善这种方法,以便我至少有大约50%的机会得到吗? 为了使它更易于理解:我将应用程序构建为JAR文件,然后通过批处理命令运行 程序的内容-使其尽可能简单: 如果我打开10个命

  • 问题内容: 我正在寻找最好的方法(快速而优雅)来获取python中的随机布尔值(翻转硬币)。 目前,我正在使用或。 有我不知道的更好的选择吗? 问题答案: 亚当的答案相当快,但是我发现答案要快得多。如果您真的想要布尔值而不是long值,那么 仍然是两倍的速度 两种解决方案都需要 如果最大的速度不是优先考虑的话,那么阅读肯定会更好 在看到@Pavel的答案后添加了此内容

  • 我正在使用CodeIgniter 3和PostgreSQL 9.4数据库。如果数据库中相应列的数据类型是布尔值,有没有办法在PHP中获取布尔值? 我使用CodeIgniters查询生成器类,如下所示: 用户表中的所有布尔值都由字符串('t'和'f')表示。

  • 问题内容: Go的布尔类型的零值为。Postgres支持未定义的BOOL类型,表示为NULL。尝试从Go中的Postgres获取BOOL值时,这会导致问题: 输出: 解决这个问题的最惯用的方法是什么?我想象的两种解决方案都不是很吸引人: 不要使用Go的类型。相反,我可能会使用一个字符串,并进行自己的转换,这占 在Postgres中,请始终通过使用或其他方式确保BOOL为TRUE或FALSE 。 问

  • 问题内容: 我有一段代码应该在其中创建总机。我想返回所有打开的开关的列表。这里的“开”等于和“关”等于。因此,现在我只想返回所有值及其位置的列表。这就是我所拥有的,但它只返回第一次出现的位置(这只是我的代码的一部分): 这只会返回“ 4” 问题答案: 使用,返回找到的第一个匹配项的索引。 对于庞大的列表,最好使用:

  • 问题内容: 以下代码不会输出任何内容: 但是下面的代码打印: 有没有更好的方式来打印或时是不是增加一个声明? 问题答案: 或者,如果您只想在为假时输出: