Executor.submit没有按预期工作

时间:2016-01-29 06:13:52

标签: java multithreading thread-safety

代码段:

//   MainClass 
public class DataStreamHandler {    
    Future<String> future =  executor.submit(new JobConsumer());                        
        try {               
            System.out.println("start future " );
            String str = (String) future.get();
          }
}    
//Thread Class
public class JobConsumer implements Callable 
{
   public String call() {
      //this logic listens to a stream and return.
      return "JobConsumer Done";
}

此处,在收听流后,只有call()返回。

但现在主线程打印了#34;开始未来&#34;没有call()完成。我怎样才能确保&#34;开始未来&#34;仅在call()完成后打印?

1 个答案:

答案 0 :(得分:0)

你知道future.get()做了什么以及它实际返回了什么?

好吧,首先它等待任务完成并返回任务的call方法返回的值。在您的情况下,future.get()将返回"JobConsumer Done"

在这两个陈述之后:

System.out.println("start future " );
String str = (String) future.get();

你可以先判断为什么开始未来的打印。