Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使此方法返回数组?_Java_Arrays_Multithreading - Fatal编程技术网

Java 如何使此方法返回数组?

Java 如何使此方法返回数组?,java,arrays,multithreading,Java,Arrays,Multithreading,如何使以下方法返回字符数组 public char[] startThread() { // arr declaration Runnable r = new Runnable() { @Override public void run() { arr = getArray(); // arr assignment } }; new Thread(r).start(); return

如何使以下方法返回
字符数组

public char[] startThread() {
    // arr declaration
    Runnable r = new Runnable() {
        @Override
        public void run() {
            arr = getArray(); // arr assignment
        }
    };
    new Thread(r).start();
    return arr;
}

char arrNew[] = startThread();
注意:上面的代码段生成一个错误

您不能这样做

从方法返回时,没有char数组。它还没有创建。因此,指定为引用将不起作用。无论是
Callable
,都不会对此有所帮助

您可以做的是创建一个holder对象,并返回该对象(这与
Future
对象非常相似):

请注意,
h.arr
将随时间而变化,因此第一次调用它时,它很可能返回
null
,您不能这样做

从方法返回时,没有char数组。它还没有创建。因此,指定为引用将不起作用。无论是
Callable
,都不会对此有所帮助

您可以做的是创建一个holder对象,并返回该对象(这与
Future
对象非常相似):


请注意,
h.arr
将随时间变化,因此第一次调用它时,它很可能返回
null

查找java.util.concurrent.Callable,它类似于runnable,但返回一个值


如果在1.6 JDK中,您可以查找未来的对象。

查找java.util.concurrent.Callable,它类似于runnable,但返回一个值


如果在1.6 JDK中,您可以查找未来的对象。

我无法指定最终变量。您看到函数调用了吗?您可能无法从Runnable内部为arr分配新值,因此此示例不起作用。@如果您是对的,我尝试了它,重建了示例。我无法分配给最终变量。您看到函数调用了吗?您可能无法从Runnable内部为arr分配新值,因此此示例不起作用。@Gyrogarless您是对的,我尝试了它,重建了我的示例。
public static class ArrayHolder {
    public char[] arr;
}

public ArrayHolder startThread() {

    final ArrayHolder holder = new ArrayHolder();

    Runnable r = new Runnable() {
        @Override
        public void run() {
            holder.arr = getArray(); // arr assignment
        }
    };
    new Thread(r).start();
    return holder;
}

ArrayHolder h = startThread();
char arrNew[] = h.arr;