草庐IT

java - 为什么 Android 的 AsyncTask 没有实现 Future?

在Java中,我已经习惯了使用Futures.现在我在看安卓,AsyncTask实现几乎所有相同的方法并涵盖相似的生命周期。但是,如果我想保持一致并在我的所有代码中使用Future,我必须将AsyncTask包装在一个愚蠢的包装器中,因为它实际上并没有实现Future。他们只需要添加一个isDone()方法,这看起来很简单,然后添加implementsFuture.(稍后添加:请参阅下面的答案,了解它有多么微不足道)。任何Android专家都知道一些很好的理由/模糊的错误可能导致为什么还没有这样做? 最佳答案 通过阅读AsyncTa

java - Java Futures 的乱序返回

我可以想出的唯一模型来运行多个相似的进程(SIMD)使用JavaFutures(java.util.concurrent.Future)如下:classJobextendsCallable{publicTcall(){//...}}Listjobs=//...List>futures=ExecutorService.invokeAll(jobs);for(Futurefuture:futures){Tt=future.get();//Dosomethingwitht...}此模型的问题在于,如果作业0需要很长时间才能完成,但作业1、2和3已经完成,则for循环将等待从作业0获取返回值。

java - 并发 - 中断 Future 而不取消它

有什么方法可以在不取消Future的情况下中断它吗?javadocAPI:booleancancel(booleanmayInterruptIfRunning)Attemptstocancelexecutionofthistask.Thisattemptwillfailifthetaskhasalreadycompleted,hasalreadybeencancelled,orcouldnotbecancelledforsomeotherreason.Ifsuccessful,andthistaskhasnotstartedwhencanceliscalled,thistaskshou

java - 将 Scala future 转换为 Java future

我有一个包含方法的生成的java接口(interface):publicFuturegetCustomersAsync(AsyncHandlerasyncHandler);我想用Akka实现它。我写了以下内容:overridedefgetCustomerAsync(asyncHandler:AsyncHandler[Customer]):Future[_]={myActorRef.ask(GetCustomer,system.actorOf(Props[Responder]))}问题是ask返回scala.concurrent.Future[Any]并且该方法必须返回java.util

java - Java GUI 开发的 future ?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭12年前。考虑到这一点Sun/Oracle在“发明”了JavaFX之后决定不再开发SwingJavaFX不能正常工作,someconsideritafailurealreadySWT并非真正独立于平台的特性、处理GUI元素的手动任务以及绑定(bind)特定于平台的库的必要性还有别的出路吗?如果我想在JVM上做GUI开发具有良好的API(Swing和SWT不错,但也

java - java.util.concurrent.Future 是线程安全的吗?

我正在尝试查找说明java.util.concurrent.Future是否是/不是线程安全的文档。例如,我能否安全地将同一个Future实例提供给多个线程,这些线程都将调用Future.get(...)?我已经以这种方式使用Future测试了代码,它似乎工作正常,但如果我能找到文件证明future以这种方式进行并发访问是安全的,我会更高兴。谢谢。 最佳答案 鉴于Future旨在供多个线程使用(至少是提交线程和设置结果的线程),并且文档指定异步计算和异步计算之间存在先行关系get调用之后发生的操作,我会假设这些实现是线程安全的(至少

java - Future.cancel(false) 的用例?

在什么情况下需要将false参数的mayInterruptIfRunning传递给Future.cancel()?如果我理解正确,如果你传递false并且任务被取消但线程没有被中断,结果(或ExecutionException)将永远无法访问,因为任务仍然被标记为已取消(即isCancelled()返回true和get()抛出CancellationException。)其他可能的情况是:Runnable或Callable实现不检查中断,即使你打断它也会运行完成(这里的中断没有区别)在您调用cancel()之前任务已经完成(再次中断没有区别)任务在退出之前需要执行一些清理(一个编写良好

java - 具有 future 兼容性且不会破坏 future 修改的类

我正在阅读Android的RecyclerView的源代码,我正在使用SimpleOnItemTouchListener并阅读有关此类的文档。但是我不确定我是否理解这个的意思:Anotherbenefitofusingthisclassisfuturecompatibility.Astheinterfacemaychange,we'llalwaysprovideadefaultimplementationonthisclasssothatyourcodewon'tbreakwhenyouupdatetoanewversionofthesupportlibrary这是因为SimpleOn

java - 0 超时的 future.get 行为

谁能给我指点一些文档,明确说明超时为0的“Future.get”不会等待?java.util.concurrent.Future的API文档没有明确说明future.get(0,unit)的行为。就其本身而言,语句“如果需要,最多等待给定时间...”暗示此调用根本不会等待,但考虑到Object.wait(0)的长期行为>(无限等待),我很紧张依赖于future.get(0,unit)的“无等待”行为扫描一些JDK提供的类(即FutureTask)的源代码,我看到Future的这个特定实现在超时为0时不会等待。我想说longtimeout=Math.max(until-now,0);re

java - 如何在不使用 ExecutorService 的情况下获得 Future<MyObject>?

我真的很想做这样的事情:CallablemyCallable=....Future=newThread(myCallable).start();我基本上想启动一个与我的主要任务并行运行的长时间运行的任务,我不希望池化或线程重用。Executors的东西似乎非常面向池,它要求我关闭池,所有这些我都不想做。我想使用“Callable/Future”模式,因为稍后我可能不得不引入执行器,但就目前的情况而言,它们只是开销。有什么建议吗? 最佳答案 试试FutureTask。它对Executor框架没有任何明确的依赖性,可以按原样实例化,或者