如何让这个方法返回一个数组?

时间:2013-04-04 08:25:06

标签: java arrays multithreading

如何让以下方法返回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();

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

2 个答案:

答案 0 :(得分: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对象。

答案 1 :(得分:0)

你做不到。

从方法返回时,您没有char数组。它尚未创建。因此,将指定为参考将不起作用。 Callable都不会对此有所帮助。

您可以做的是创建一个holder对象,并返回它(这与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

相关问题