我有一个实现 Runnable 的类
public class MyRunnable implements Runnable {
private long RID = <SOME_LONG_ID_VALUE>;
public long getRID() { return this.RID; }
public void run {
System.out.println("HAI!");
}
}
有没有办法通过RID
字段在ThreadPoolExecutor
内“路由”任务(我的意思是,如果线程N 3使用RID = 1
运行Runnable,那么下一个使用RID = 1
的tast必须由线程N 3执行(如果它还活着))
谢谢。
最佳答案
据我了解,对于每个 RID,您都有一个执行上下文,并且您希望针对该上下文连续执行所有 MyRunnable
对象。
您的错误是您尝试将该上下文链接到线程。通过 Actor 更好地表示该上下文。您可以使用众所周知的 Actor 框架,例如 Akka,但为了您的目的,简单 Actor implementation会起作用的。
编辑:
另一种观点:由于Actor实现有唯一的接口(interface)方法execute
,所以它可以被认为是一个串行执行器,串行运行提交的任务。由于它没有自己的线程池,而是使用另一个执行器,在所有 Actor 之间共享,因此可以称为辅助执行器。
关于java - "Routing"threadpoolexecutor 内的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810202/