从线程返回对象

Cil*_*nco 1 java multithreading return

我想知道是否有一个很好的方法可以从正在运行的线程返回对象。在我的android项目中(对于这个问题并不重要),我有以下方法:

public void getFolders()
{
    Thread t = new Thread(new Runnable() 
    {
        @Override
        public void run() 
        {
            List<File> result = new ArrayList<File>();
            Files.List request = null;

            do 
            {
                try 
                {
                    request = service.files().list();
                    request.setQ("'appdata' in parents");

                    FileList files = request.execute();

                    result.addAll(files.getItems());
                    request.setPageToken(files.getNextPageToken());
                } 
                catch (IOException e) 
                {
                    System.out.println("An error occurred: " + e);
                    request.setPageToken(null);
                }
            } 
            while (request.getPageToken() != null && request.getPageToken().length() > 0);
        }   
    });

    t.start();
}
Run Code Online (Sandbox Code Playgroud)

此方法从Internet上获取一些数据并将结果存储在中List<File> result。这就是为什么我不想在UI线程中运行它的原因。现在,我想将此列表返回到我的main方法。做这个的最好方式是什么?

Nar*_*hai 5

public interface Callable<V>
Run Code Online (Sandbox Code Playgroud)

一个返回结果并可能引发异常的任务。实现者定义一个没有参数的单一方法,称为call。

Callable接口与相似Runnable,因为两者都是针对其实例可能由另一个线程执行的类设计的。Runnable但是,A 不返回结果,并且不能引发已检查的异常。

如何使用Callable

编辑: 另外,您应该在android中使用AsyncTask来执行后台任务,而不要创建自己的线程。