当前位置: 首页 > 面试题库 >

这是使用java.util.concurrent.FutureTask的好方法吗?

琴镜
2023-03-14
问题内容

首先,我必须说我对API java.util.concurrent很陌生,所以也许我正在做的事情是完全错误的。

我想怎么办?

我有一个Java应用程序,它基本上运行2个单独的处理(称为 myFirstProcessmySecondProcess
),但是这些处理必须同时运行。

因此,我尝试这样做:

public void startMyApplication() {
    ExecutorService executor = Executors.newFixedThreadPool(2);
    FutureTask<Object> futureOne = new FutureTask<Object>(myFirstProcess);
    FutureTask<Object> futureTwo = new FutureTask<Object>(mySecondProcess);
    executor.execute(futureOne);
    executor.execute(futureTwo);
    while (!(futureOne.isDone() && futureTwo.isDone())) {
        try {
            // I wait until both processes are finished.
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    logger.info("Processing finished");
    executor.shutdown();
    // Do some processing on results
    ...
}

myFirstProcessmySecondProcess
是实现的类,Callable<Object>它们的所有处理都在call()方法中进行。

它工作得很好,但是我不确定这是正确的方法。是做我想要的好方法吗?如果没有,您能给我一些提示来增强我的代码(并使其尽可能保持简单)。


问题答案:

使用该get()方法会更好。

futureOne.get();
futureTwo.get();

两者都等待线程完成处理的通知,这为您节省了您正在使用的忙碌等待计时器,这既效率低下又不雅致。

另外,您还可以使用API get(long timeout, TimeUnit unit)定义线程休眠和等待响应的最大时间,否则它将继续运行。

有关更多信息,请参见Java
API



 类似资料:
  • 使用cursors来获取android所保存的图像,需要对cursors进行外部存储授权。如果AndroidOS是6.0或更高版本,并且没有获得授权许可,申请将被终止。如果获得权限,则需要进行关闭游标的处理。 如果是Java,那么最好按照以下方式编写onStop,除了Kotlin,将会引发一个异常。 如果你能给我建议如何写得最好,我会很高兴的。 下面是使用的代码:

  • 问题内容: 我能够使用三个链接来组合一个简化的完整History.js示例,以从整个页面加载内容片段,而无需更新页面和更新浏览器历史记录。 这是相关的代码段- 完整的工作示例在此处http://jsfiddle.net/PT7qx/show 我想知道这是否正确。以前的版本可以使用#url绑定到事件。我没有看到使用此最新版本将事件绑定到url的任何示例,因此我使用了.on()click事件来调用Hi

  • 这里使用parentNode好?还是parentElement好? 这是bootstrap中的一段代码,用来查找一个元素的祖先元素中所有匹配selector的元素。 我觉的应该使用parentElement更合适一些。 closet是Element上一的一个方法。 要查找的应该是Element,而不是像Text,Comment这样的Node。 当然这里使用parentNode也是可行的,一般会返回

  • 问题内容: 我有这个HTML: 控制器是: 该服务运行良好,因此我不在此处粘贴代码…在这种情况下,结果是“ Hello world! ”。我以这种方式更改了HTML: 但这是行不通的。 我改变了控制器: 然后是HTML 这可行! 所以我的问题是: 这是直接在HTML中直接使用服务功能的唯一方法,还是我遗漏了某些东西? 问题答案: AngularJS模板只能调用作用域上可用的函数 。因此,无论采用哪

  • 问题内容: 我读这个和这个,结果发现,在课堂上我需要保存到类的引用,当东西在发生类,我们执行由类的接口中定义的方法工具。好吧,我明白了。我以不同的方式使用接口来调用回调: 我发现这种方式更具可读性,更容易理解,但是不确定这是否是不好的做法。因此,我可以随意走这条路吗? 问题答案: 所以我可以随意走这条路吗? 这种方式不是很正确。 您在说的是称为Observer或/ 模式。 简而言之:订户想要从发布

  • 我读了这篇文章和这篇文章,发现在类中,我需要保存对类的引用,当类中发生一些事情时,我们执行一个由类实现的接口定义的方法。不知何故我明白了。我以不同的方式使用接口来调用回调: 我发现这种方式更易读,更容易理解,但不确定这是否是一个不好的做法。所以我可以自由地走得更远吗?