问题标签 [futuretask]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
threadpool - 向 ExecutorService 提交 Callable 永远不会完成
我面临的问题已经困扰了一周,这里是:我有一个类 AdminBlocageBackgroundProcessing.java,它通过读取数据并验证它并将其存储在数组列表中来处理 CSV 文件:
}
我从我的动作类中调用它:
现在的问题是 CSV 有太多数据,当我们点击导入它时,进程在后台异步启动,但它永远不会完成,尽管在 jsp 中使用了自动刷新来维护会话。尽管代码对小数据工作正常,但我们如何确保它完成?
但是对于大数据,此功能会崩溃并且无法监控。
我正在使用的线程池由容器提供:
}
java - 在 ScheduledThreadPoolExecutor 中重新启动已取消的任务
我正在使用ScheduledThreadPoolExecutor创建任务,并将 Futures 添加到我的 ThreadFactory 类中的列表中,如下所示。
现在,当我想取消所有任务时,我执行以下操作
现在如何在以后重新启动这些任务?
java - FutureTask 是如何进行异步计算的
如果我将在 main 中执行此操作,它将创建一个新线程并向其提交一个任务以进行异步计算。
如果您看到 FutureTask文档,它还会显示:
可取消的异步计算。此类提供 Future 的基本实现,包括启动和取消计算、查询计算是否完成以及检索计算结果的方法。
那么它如何FutureTask
在asynchronous computation
内部创建线程并提交我们在实例化时给它的任务,FutureTask
例如:
否则它不能是异步计算,请提供FutureTask
源代码 中的代码片段,它将任务提交给线程,使其成为异步计算。谢谢。
我得到了答案。它基本上是试图在与调用者相同的线程中运行任务。在给定的代码中非常明显:
当您调用futureTask.run()
它时,它只是调用sync.innerRun();
并且sync
是内部类的实例Sync
。因为它只是调用call()
同一线程中的可调用对象。
java - 两个线程同时执行 cache.putIfAbsent 会发生什么?
我正在学习Java Concurrency in Practice
,但一些代码让我感到困惑:
我就是不明白,既然putIfAbsent
只能保证put
操作是原子的,而且都返回null,如果两个线程都可以进入run
方法呢?
java - 如何中断给定 Future 对象的线程?
如果它没有在 5 秒内完成,我想启动一个线程并取消它:
但是,awaitTermination 似乎返回 false。有没有办法让我检查为什么 ExecutorService 不会终止?我可以弄清楚哪些线程仍在运行吗?
java - 如何在地图存在时从地图中获取数据?
下面是我的启动后台线程的工厂代码TempScheduler
-
现在客户将像这样使用上述工厂调用我们的代码。他们只会获取我们的 Client 实例一次,然后使用该实例继续调用read
我的实现中的方法 -
下面是我的后台线程代码,它将从 URL 中获取数据,对其进行解析并将其存储在类变量中 -
在解析来自 URL 的数据后,我上面的后台线程将ClientData
使用它的 setter 将结果存储在我的类中的变量中。下面是我的ClientData class
。
问题陈述:-
现在有趣的部分来了,正如您所看到的,客户将使用上述工厂调用我们的代码,一旦他们调用getInstance()
方法,我的后台线程就会启动,它将从 URL 获取数据然后解析它并将其存储在类变量中。但是在getInstance()
执行该方法后,他们会read method
立即在我的客户端代码中进行调用..
然后我应该使用我的后台线程在我的实现代码中设置的变量。我的实现代码具有read
方法用途CallableTaks
,future.get
因此它会自动出现在下面的call
方法中。在下面的类中,我应该使用由后台线程设置的变量值。我需要使用getPrimaryMapping
方法来获取下面代码中的值。
这种方法的问题是,一旦客户第一次调用我们的工厂来获取实例,它就会启动后台线程,该线程将从 URL 中获取数据并解析它并将数据存储在类变量中,但是它会立即调用read
我的实现类的方法..
现在可能第一次,我的后台线程仍在解析数据,但实际调用已经进入内部call method
,然后它会尝试从getPrimaryMapping
方法中获取数据,但它不会有任何东西,对吧?为什么 bcoz 它仍在解析数据.. 那么我如何确保当客户第一次调用我们的代码时,一旦解析完成,然后只允许在调用方法中获取变量值。
然后第二次就好了..由于数据会在内存中,只有第一次是问题..
有没有办法做到这一点?
java - 如何将超时从一个 FutureTask 传播到其 Callable 使用的另一个依赖项?
我处于以下情况(也许我对整个事情进行了过度设计,或者我处于完全的僵局,但无法想到另一种方式):
- 取一个或多个
FutureTask
实现异步计算(侦听网络中的多播数据包,收集不同种类的统计信息),我们将其命名为MulticastStatisticsProvider
, - 采取另一个依赖于第一个任务的计算来执行额外的计算(将统计数据与公式结合以公开一些综合信息),这个计算也是异步的,所以在另一个
FutureTask
我们将调用的定义中FormulaComputing
, - 问题:我们希望它在调用时
FormulaComputing.get(timeout, timeUnit)
将超时传播到其内部并且找不到实现此目的的方法。Callable
MulticastStatisticsProvider.get(timeout, timeUnit)
在此,我到目前为止实现的代码状态:
这是调用者代码。
/li>这是
/li>FormulaComputing
代码:
我曾想象过通过自省来改变私人内部sync
领域,用我的自定义方法FutureTask
手工制作,但内省和反思通常是可以避免的黑客攻击。Callable
get
android - Android:FutureTask 无法转换为 MyClass
情况:一个函数调用一个线程向服务器发送数据。该线程又产生另一个线程,以使用 ObjectInputStream() 从服务器获取结果。
最后,这个对象由生成的线程返回给调用函数。
注意:线程是Callable并且是同步的。
问题:我得到一个异常,“ FutureTask cannot be cast to MyClassName ”。
我在网上没有找到解决方案。有什么建议么 ?
客户代码:
onclick() 方法。
java - 识别 AWT 线程
我有一个类,它从 Swing 中装饰 JTextComponent。它包含的方法可以从任何线程调用,因此我必须确保与 JTextComponent 一起使用的代码将由 AWT 线程执行。
第二个要求是,调用整个方法的线程将“等待”直到 AWT 线程完成任务。
该代码对我来说运行良好,但仍然存在一个问题。如果任何想要使用我的类的人重命名 AWT 线程,那么它就会陷入僵局。
有什么方法可以明确地识别 AWT 线程并避免这个问题?
谢谢