我的问题是,我只想在多次并发运行的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;
}
答案 0 :(得分:1)
就我的问题而言,你有4个线程在计算后返回一些值。以下是一些想法:
Callable<V>
else Runnable
。ExecutorService
提交您的任务(主题),并会Future<V>
或Future<?>
,具体取决于Callable
还是Runnable
。< / LI>
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();
}
}
这是您可以从线程返回值的方法。