我的目标是在扩展Thread的类中包含一个方法调用队列,其运行方法每15秒从队列中弹出一次方法调用。这可以在一个庞大的开关盒中使用Strings,int或chars以阴暗的方式完成,但我想知道是否有其他人对这个问题有更优雅的解决方案。
看起来像这样的东西?
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...
}
答案 0 :(得分:3)
您可以使用界面来包装要调用的方法:
public interface MethodWrapper {
void execute();
}
public class Potato extends Thread{
Queue<MethodWrapper> methodsQueue = new LinkedList<>();
public Potato(){}
run(){
methodsQueue.poll().execute();
}
//Methods of this class...
}
答案 1 :(得分:0)
此单线程(可在Android API中使用)为您提供了与您尝试实施的功能相同的功能:
ScheduledExecutorService s = Executors.newScheduledThreadpool(numThreads);
如果您需要使用反射运行任意方法,那么将它们提交到此服务就像在自定义Runnable参数中包装每个方法并调用s.schedule(Runnable,long,TimeUnit);
我无法想到一个更优雅,更简单的问题解决方案(至少在使用Java时)。它具有自2004年以来经过测试并用作核心Java API的一部分的好处。 - @CodeBlind