0

如何使以下方法返回 a character array

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();

注意:上面的代码片段会产生错误

4

2 回答 2

3

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

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Callable.html

或者

如果在 1.6 JDK 中,您可以查找 Future 对象。

于 2013-04-04T08:28:06.557 回答
0

你不能这样做。

当你从你的方法返回时,你没有你的 char 数组。它尚未创建。所以,作为参考分配是行不通的。两者都Callable不会对此有所帮助。

您可以做的是创建一个持有者对象,然后返回它(这与Future对象非常相似):

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;

请注意,这h.arr会随时间改变,所以你第一次调用它时它很可能会返回null

于 2013-04-04T08:26:38.737 回答