【发布时间】:2016-08-24 20:30:43
【问题描述】:
我的目标是在扩展 Thread 的类中包含一个方法调用队列,该类的 run 方法每 15 秒从队列中弹出一个方法调用。这可以在庞大的 switch 案例中使用字符串、整数或字符以一种隐蔽的方式完成,但我想知道是否有其他人对此问题有更优雅的解决方案。
看起来像这样的东西?
public class Potato extends Thread{
Queue<Methods> methodsQueue = new LinkedList<Methods>();
public Potato(){}
run(){
methodsQueue.poll();//This would execute a method
}
//Methods of this class...
}
【问题讨论】:
-
我想你会想看看Reflection API
-
看看执行器API
-
你到底在坚持什么?
-
简单的解决方案,一个每 15 秒执行一次的 java.util.Timer,它从某个单一函数接口类型的队列中抓取,您可以通过编写 lambda 轻松地用通用操作填充这些函数。
-
这一行(在 Android API 中可用)为您提供了与您尝试实现的功能相同的功能:
ScheduledExecutorService s = Executors.newScheduledThreadpool(numThreads);如果您需要使用反射运行任意方法,则将它们提交到此服务就像将每一个包装在自定义 Runnable 参数中并调用s.schedule(Runnable,long,TimeUnit)一样简单。我想不出更优雅、更简单的解决方案来解决您的问题(至少在使用 Java 时)。自 2004 年以来,它已被测试并用作核心 Java API 的一部分。
标签: java multithreading queue