如何从多线程返回值?

时间:2015-10-12 04:33:44

标签: java multithreading java-native-interface native

我的问题是,我只想在多次并发运行的4个线程中从多线程返回值。每次线程调用和运行时我都需要一个返回值。请理解我,谢谢你,我的代码片段看起来像这样,Thread1:我正在调用java到本机库函数,函数返回整数值。

 public void run() {
            double time = System.currentTimeMillis();
            println("Thread-1 starts " + time);
            ED emot = new ED();
            emot.edetect("str");
            try {
              Thread.sleep(1);
            } catch {

            }
            println("Value: " + emot.getvalue);
            i = emot.getvalue;
                }

3 个答案:

答案 0 :(得分:1)

就我的问题而言,你有4个线程在计算后返回一些值。以下是一些想法:

  1. 如果您的主题返回某些结果,请使用Callable<V> else Runnable
  2. 您可以使用ExecutorService提交您的任务(主题),并会Future<V>Future<?>,具体取决于Callable还是Runnable。< / LI>
  3. 如果您想接收所有线程的结果,您可以提交所有并获得期货,然后调用future.get阻止直到收到结果。如果你想从任何一个线程接收结果,那么在这种情况下你也可以使用ExecutorCompletionService来维护一个结果队列,无论它们收到什么顺序。

答案 1 :(得分:0)

你可以制作那个对象,一个,一个类变量。这样,当您在主线程中创建新对象时,您可以通过getter方法访问该值。

public static void main(String[] args) {
    //Your code

    YourRunnableClass r = new YourRunnableClass();
    Thread yourThread = r;
    yourThread.start();

    //other code

    r.getValue() //The value you are trying to get
}

public class YourRunnableClass implements Runnable {

    private ED emot;

    public int getValue() {
        return emot.getvalue();
    }

    public void run() {
        //Your Code
    }
}

答案 2 :(得分:0)

在多线程环境中,我们可以使用Executer Service从线程返回值。 JDK 5提供此功能。

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

示例:

public class MyThread implements Callable{

    @Override
    public String call(){
        Thread.sleep(2000);
        return "Hello";
    }

    public static void main(String args[]){
          ExecutorService executor = Executors.newFixedThreadPool(5);
          Callable<String> callable = new MyThread();
          String value = executor.submit(callable);
          System.out.println("The returned value is : "+value);
          executor.shutdown();
    }

}

这是您可以从线程返回值的方法。