我的主要问题
1。带超时的get是解决此问题的最佳方法吗?
2。是否有可能我正在等待一个任务的get调用,该任务尚未被放置在线程池中(是否是一个活动的工作者)。在这种情况下,我可能正在终止一个线程,当它启动时,它实际上可能在所需的时间限制内完成?
如有任何建议,将不胜感激。
>
带超时的get是解决此问题的最佳方法吗?
是否有可能我正在等待一个任务的get调用,该任务尚未被放置在线程池中(是否是一个活动的工作者)。在这种情况下,我可能正在终止一个线程,当它启动时,它实际上可能在所需的时间限制内完成?
class LongRunningTask extends Thread {
private Socket socket;
private volatile AtomicBoolean atomicBoolean;
public LongRunningTask() {
atomicBoolean = new AtomicBoolean(false);
}
@Override
public void interrupt() {
try {
//clean up any resources, close connections etc.
socket.close();
} catch(Throwable e) {
} finally {
atomicBoolean.compareAndSet(true, false);
//set the interupt status of executing thread.
super.interrupt();
}
}
public boolean isRunning() {
return atomicBoolean.get();
}
@Override
public void run() {
atomicBoolean.compareAndSet(false, true);
//any long running task that might hang..for instance
try {
socket = new Socket("0.0.0.0", 5000);
socket.getInputStream().read();
} catch (UnknownHostException e) {
} catch (IOException e) {
} finally {
}
}
}
//your task caller thread
//map of futures and tasks
Map<Future, LongRunningTask> map = new HashMap<Future, LongRunningTask>();
ArrayList<Future> list = new ArrayList<Future>();
int noOfSubmittedTasks = 0;
for(int i = 0; i < 6; i++) {
LongRunningTask task = new LongRunningTask();
Future f = execService.submit(task);
map.put(f, task);
list.add(f);
noOfSubmittedTasks++;
}
while(noOfSubmittedTasks > 0) {
for(int i=0;i < list.size();i++) {
Future f = list.get(i);
LongRunningTask task = map.get(f);
if (task.isRunning()) {
/*
* This ensures that you process only those tasks which are run once
*/
try {
f.get(5, TimeUnit.MINUTES);
noOfSubmittedTasks--;
} catch (InterruptedException e) {
} catch (ExecutionException e) {
} catch (TimeoutException e) {
//this will call the overridden interrupt method
f.cancel(true);
noOfSubmittedTasks--;
}
}
}
}
execService.shutdown();
我基本上有一个对象,它存储了一个项目的3D位置和其他属性,如速度。该位置每隔100毫秒由一个单独的威胁计算一次。另一种威胁访问这些属性并修改其中的一些属性。 我的第一个想法是简单地对每个属性使用,但据我所知,对volatile属性的每个操作都必须是原子的。由于这两种威胁都允许在某些情况下改变某些属性(如速度),这似乎不起作用。 我的下一个想法是使用Java的关键字,同步每个getter和sette
本文向大家介绍浅谈ROC曲线的最佳阈值如何选取,包括了浅谈ROC曲线的最佳阈值如何选取的使用技巧和注意事项,需要的朋友参考一下 为了获取ROC曲线的最佳阈值,需要使用一个指标--约登指数,也称正确指数。 借助于matlab的roc函数可以得出计算。 至此计算结束了。 补充拓展:利用阈值分割目标图像 一.全局阈值 方法一:OTSU方法 otsu法(最大类间方差法,有时也称之为大津算法)使用的是聚类的
问题内容: 和之间的实际区别是什么? 假设我希望用户会话在闲置15分钟后无效(而不是在第一次打开后15分钟内无效)。其中哪一项对我有帮助? 我也知道我可以这样做,可以将用户的Cookie设置为在一定时间内过期。但是,cookie过期与服务器端的实际会话过期是不相同的。Cookie过期后,这还会删除会话吗? 我的另一个解决方案是 对每个请求都很简单 ,然后将会话与当前时间进行比较,然后基于该时间删除
问题内容: 我在Java线程方面有一些经验,但我想知道… 存储多个线程的最佳实践是什么,我可以在其中单独或成组访问这些线程? 我自己的解决方案是创建一个类,但是自然地,我希望使用更可靠的本机类。 提前致谢! 编辑 显然,功能对于最佳方法非常重要。好吧,我举一个例子: 我有一个基本上可以同时搜索大量信息的应用程序,因此我正在使用线程。但是,每个线程仅需要执行整个操作的一部分,因此我希望添加其他参数来
问题内容: 作为标准代码的一部分而不是仅用于调试目的,是否存在性能或代码维护问题? 是 胜过或坏于 此外,是否有任何方法可以设置业务规则,例如始终不进行检查,因此在整个代码中的任何时候都小于0时,都会引发错误,例如,如果您在函数的开始处,函数内的任何位置进行设置哪里变得小于0引发异常? 问题答案: 为了能够在整个函数中x小于零时自动引发错误。您可以使用类描述符。这是一个例子:
我有一个处理实时事件的系统。用户可以在指定的时间间隔插入自定义事件。实时引擎使用java.time.Duration来计时事件。通过jsp向用户展示一个菜单,该菜单以(全)秒为单位指定Duration。事件列表被序列化为Long值。所以我有三种使用相同值的方法。我创建了一个值对象,在每次访问时执行转换,这样我就不必将转换分散在整个代码中。我想知道是否有更好的方法来完成这个场景。这是我的VO。