java - 线程完成执行后返回一个值

标签 java multithreading

我有一个 Java Thread,用于将一些文件异步上传到服务器。我需要我的线程在完成上传后返回一些值。正如 this 中提到的例如,我创建了另一个方法,它返回一些值并从主类访问该方法。至于我的要求,我必须上传多个文件,因此如果线程第二次运行,它会卡在 t1.join() 上。所以我需要知道解决我的问题的最佳方法是什么。?

我的上传线程:

public class UploadThread extends Thread {

    public UploadThread() {

    }

    @Override
    public void run() {

        try {
            //Upload happens here

        } catch (IOException ex) {
            Logger.getLogger(UploadThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //Method use to return upload status
    public String status() {
        //verify upload has completed
        return "Upload successful";
    }
}

从主类调用线程:

//Calling upload thread multiple times depends on no of files
for (int i = 0; i < fileList.length; i++) {

    UploadThread t1 = new UploadThread();
    t1.start();
    t1.join();
    String status = t1.status();
    System.out.println(status);

}

最佳答案

我已经实现了带有回调的 Future 接口(interface),如下所示。它解决了我的问题。

可调用实现:

public class Upload implements Callable<Integer> {
    public Upload() {  
    }

    @Override
    public Integer call() {
        try {
            //Upload happens here. after completing returns value as required.  
            return 0;
        }
    }    
}

从主类执行可调用:

for (int i=0; i<fileList.length;i++) {
    Upload up = new Upload();
    FutureTask<Integer> future = new FutureTask(up);
    future.run();
    int result = future.get();
}

我按照 here 中的示例进行操作

关于java - 线程完成执行后返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22678556/

相关文章:

c# - 哪种线程方法最适合主服务器网络?

asp.net - .Net MVC/Web Api 中的并发请求限制为 10

java - 使用线程更改数组中数据的有效方法

java - 无法POST,HttpURLConnection默认为GET

java - 数据库计算值得并行化吗?

java - 如何在不挂起 UI 的情况下在 Android 上模拟客户端延迟?

c++ - 等待 24 小时的线程的潜在系统成本

java - 同步方法和 block 之间有什么区别?

java - 如何在函数调用中强制顺序

java - 正则表达式在 validator 中有效,在java代码中无效