java - 如何在新线程中返回值?

标签 java sql multithreading

我有这段代码,我想在新线程中返回“sql”的值,以便此查询快速从数据库发送/获取信息,而不是在主线程上。如果我创建一个新线程并使用 sql 初始化一个字符串,然后将其返回到线程之外,它将返回 null。无论如何,我可以在新线程中返回 sql 而不是 null 吗?谢谢。

public String getCurrentG(final String username) {




            Sql2o sql2o = new Sql2o(DB_URL, USER, PASS);

            String sql = "SELECT CurrentGuild FROM Players WHERE Username='" + username + "'";

            try (Connection con = sql2o.open()) {
              return con.createQuery(sql).executeScalar(String.class);
            }


        }

最佳答案

线程不是一个可以返回值的东西。线程是代码的执行路径。每个程序都有一个主线程,该线程在 JVM 内部的某个位置开始和结束,并且它可以使用 Thread 对象创建其他线程。

由 Thread 对象创建的线程只不过是调用某个 Runnable 对象(可能是 Thread 对象本身,但这是一种老式的方法)的 run() 方法。 run() 不返回值,线程无法“返回”值。

当然,您的 run() 方法可以存储某个字段中的值——它自己的字段,或者它知道的其他某个对象中的字段。

Dgrin91 提到的“Future”接口(interface)保存着一个由线程存储的值。它是 java.util.concurrent 包的一部分。您使用 java.util.concurrent.ExecutorService 来管理工作线程池,并为其提供要执行的“任务”(也称为 Callables)。任务可以返回一个值。每次提交任务时,当线程池中的某个线程最终完成任务时,您会立即返回一个 Future 对象;它将返回值存储在 Future 中,然后通知 Future。 Future 接口(interface)提供了一些方法,您可以调用这些方法来测试任务是否已完成、等待任务完成以及获取任务返回的值。

关于java - 如何在新线程中返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24396969/

相关文章:

java - 有没有人有在渲染器类之外绘制对象的示例?

java - 使用 Spring Boot 配置 Logback

java - Android 通知振动不起作用

java - Hibernate 使用 field + max 的组合在非主键上生成值

php - 变量 'sql_mode' 无法设置为“REPLACE”的值

sql - 计算MySQL中的总持续时间

sql - 两列的 ORDER BY 比两列的 ORDER BY 慢得多

c# - 如何从 C# 系统托盘应用程序将 C 程序作为线程运行?

java - 所有CRUD操作的线程安全列表

java - 如何在DynamoDB中获取大数据?