- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这段代码,我想在新线程中返回“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/
我是一名优秀的程序员,十分优秀!