【问题标题】:ExecutorService control thread poolsExecutorService 控制线程池
【发布时间】:2014-08-01 22:06:31
【问题描述】:

我有一个智能卡阅读器池,我可以使用它们来计算数字签名。 此智能卡需要一段时间才能签名,因此我需要设置一个池来对请求进行排队并尽快处理它们。

这就是我使用单个智能卡的方式:

try{
   Smartcard smartcard=new Smartcard(slot); //slot: reader number
   smartcard.sign(file);
}catch(SmartcardException e){
   throw e; //unusable smartcard
}

我想使用 ExcecutorService 来管理多个智能卡,使用池大小等于智能卡读卡器。 我的疑问是,如果使用此对象,我是否可以将单个阅读器附加到每个线程,此外,它是否可以停止单个线程,以防其智能卡因 SmartcardException 而失败(例如:智能卡被移除或损坏)。

我继续:

  1. 我有一个设备池(智能卡读卡器),我需要一个自动系统来管理他们的工作队列。
  2. 如果发生故障,必须将设备设置为不可用并移除。
  3. 我想实现最短的请求等待时间。

ExecutorService 合适吗?

【问题讨论】:

  • ExcecutorService 是抽象的。如果你不说 which ExcecutorService 你在谈论,你就不能说ExcecutorService 是否适合你的任务。
  • 是的,当然,最后我认为没有一个 ExcecutorService 的实现是合适的......我需要建立自己的实现连接到每个设备。

标签: java multithreading executorservice


【解决方案1】:

ExecutorService 使用BlockingQueue 支持提交。这些队列显然是先进先出的,因此默认情况下线程池将尽快为每个请求执行。

【讨论】:

  • @Tobia 你如何管理你的Smartcards?您委托给某种查找地图吗? smartcards.get(slot).sign(file); 之类的东西?
  • 是的,我可以在构造函数中定义插槽 new Smartcard(slot);或轻松编辑传递静态符号中的槽的符号方法(文件文件,int槽)...
猜你喜欢
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多