从另一个线程返回一个值。没有阻塞主线程

时间:2017-06-03 17:10:46

标签: java multithreading

你好我通常是java的新手并且正在使用Minecraft插件来开始。

这是我的问题。我试图在主服务器线程上调用此方法并获取返回值。

这是我想要实现的目标。

 private String FetchEntry(String TableName, String KeyID, String ColumnName) {

    String value = "NOTHING";

        Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(LGCore.plugin, new Runnable() {
        @Override
        public void run() {

            try {
                ResultSet resultSet;
                resultSet = GetConnection().createStatement().executeQuery("SELECT " + ColumnName + " FROM " + TableName + " WHERE IdKey='" + KeyID + "';");
                resultSet.first();
                String returnvalue = resultSet.getString(1);
                //Here i would like to set value to returnvalue and return it                     

            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    });

    return value;

}

1 个答案:

答案 0 :(得分:-1)

您似乎正在调用一个计划异步任务的方法。 但是直接返回一个没有阻塞的值的异步任务有点像矛盾:如果它会直接返回一个值,那么它将是一个同步操作。 异步操作的想法是你运行操作以便在它准备就绪后检索结果,但你的主线程继续运行。 因此,您需要将异步任务的结果存储在主线程准备好的位置。

我不熟悉Minecraft代码库,但我希望无论如何这都有帮助。