我希望能够获得我已经提交给执行服务(特别是线程池执行器)的Callable(因此它们不能通过getQueue())。
我试图创建一个子类来覆盖beForeExecute之前的,但是给定的Runnable结果是一个FutureWork,而不是提交的原始Callable。
是否有其他方法来确定活动可调用项?
最后,我想用这些信息做两件事:
获取正在运行的任务,以便在用户界面中显示它们
- 检查Callable引用的文件是否匹配模式,如果匹配,则取消它
正如axtavt所建议的,我创建了一个FutureWG
的子类:
public class FutureCallable<V> extends FutureTask<V> {
private Callable<V> callable;
public FutureCallable(Callable<V> callable) {
super(callable);
this.callable = callable;
}
public Callable<V> getCallable() {
return callable;
}
}
并重写myThreadPoolExecutor
子类中的一些方法:
public class CustomThreadPoolExecutor extends ThreadPoolExecutor {
private Set<FutureCallable<UpdateResult>> running = new HashSet<FutureCallable<UpdateResult>>();
@Override
public <T> FutureCallable<T> newTaskFor(Callable<T> callable) {
return new FutureCallable<T>(callable);
}
@Override
protected void beforeExecute(Thread t, Runnable r) {
FutureCallable<UpdateResult> task = (FutureCallable<UpdateResult>) r;
running.add(task);
}
@Override
protected void afterExecute(Runnable r, Throwable t) {
FutureCallable<UpdateResult> task = (FutureCallable<UpdateResult>) r;
running.remove(task);
}
...
}
您可以重写AbstractExecutorService.newTaskFor(),它应该允许您访问原始的Runnable
s和Callable
s。然后用跟踪装饰器装饰它们,并传递到super.newTaskFor()
。
我使用(全局声明)同时运行多线程。需要一个小时才能完成任务。因此,我需要获得当前运行的线程详细信息,如活动线程,排队线程和完成线程。 但事情是我需要停止在15分钟内发送新的请求到服务器或调用一些方法。 这里shutdown或shutdowNow停止执行器,但不停止这5个线程。这就是问题所在。所以我需要手动杀死那些线程。如何杀死executor服务中手动附加的线程?
问题内容: 我一直在osx上使用此功能: …但是它很凌乱,它根本无法在Windows上运行,当然也不能在Windows上的git-bash中运行。 有没有办法做这个跨平台? 注意 具体来说,args [0]取决于二进制文件的调用方式。在某些情况下,它仅是二进制本身,例如。“ app”或“ app.exe”;所以你不能只使用它。 问题答案: 我认为这是传统的操作方式,我认为它可以在任何平台上使用。
我使用来显示几个片段,在我的上也有。我需要更改中的文本,这取决于当前在中选择的片段。我遇到的问题是:有一些缓存机制,它在片段对用户真正可见之前对它们进行实例化,例如,当我在中选择第二个页面时,也创建了第三个页面的片段。更重要的是,我不能确定片断内部是现在可见的片断还是它只是由创建的,但对用户来说并不是真的可见的。我尝试使用来实现这一目的,但对我来说,对它所做的更改速度太慢(页面滚动,然后我的已经更
注意:我理解规则站点,但我不能把所有代码(复杂/大代码)。 我在Github中添加了一个不同的代码(所有真正的代码都太多了,你在这里不需要),但复制了这个问题(主类是,切换类是),就像视频一样。 请不要向我推荐此代码的其他jar或外部库。 我希望我能说得更具体一些,但我不知道该提取和展示什么部分。在你结束这个问题之前:显然,如果有人告诉我去哪里看(技术细节),我愿意改进我的问题。 我制作了一个视频
问题内容: 如何获取Go中当前正在运行的进程的列表? 该OS软件包提供了一些功能:http : //golang.org/pkg/os/, 但没有提供任何内容来查看正在运行的进程的列表。 问题答案: 标准库中没有这样的功能,很可能永远不会。 在大多数情况下,程序不需要进程列表。Go程序通常希望等待一个或更少数量的进程,而不是所有进程。进程的PID通常通过除搜索所有进程的列表之外的其他方式获得。 如
问题内容: 出于诊断目的,有时我需要存储导致给定状态转换(例如授予锁,提交事务等)的调用堆栈,以便以后出现问题时,我可以找出最初触发状态转换的人员。 当前,我知道的唯一检索调用堆栈的方法类似于以下代码片段,我认为这非常丑陋: 有人知道实现此目标的更好方法吗? 问题答案: 我认为您可以通过以下方式获得相同的结果: