Java中方法的队列

时间:2016-08-24 20:30:43

标签: java multithreading queue

我的目标是在扩展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...
}

2 个答案:

答案 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