java中的事件线程

java中的事件线程,java,events,multithreading,Java,Events,Multithreading,我想创建一个后台线程来处理一些任务(Runnable),并按照发布的顺序执行它们 重要提示:这些任务不能在事件调度程序线程上执行 比如: BackgroundEventThread backgroundEventThread = new BackgroundEventThread(); 然后,后来,在代码中的许多地方: Runnable thingToDo = new Runnable(){...}; backgroundEventThread.executeThis(thingToDo)

我想创建一个后台线程来处理一些任务(Runnable),并按照发布的顺序执行它们

重要提示:这些任务不能在事件调度程序线程上执行

比如:

BackgroundEventThread backgroundEventThread  = new BackgroundEventThread();
然后,后来,在代码中的许多地方:

Runnable thingToDo = new Runnable(){...};

backgroundEventThread.executeThis(thingToDo);
//the things to do will be executed in the order in which they are posted.
BackgroundEventThread
应该很容易编写,但我想知道这样一个类是否已经存在于JDK中某个我不知道的地方或某个公共库中

编辑:我事先不知道要在此线程上执行的任务数

我本可以:

  • 任务0(非常短)发生在t0
  • 任务1(长时间处理…)正在发生 t0+1s时
  • 任务2(短)发生在t0+5s等
  • 任务3(等,等…)
我需要在task1之后执行task2(我事先不知道),我希望所有这些任务都能尽快执行

与EDT上发布的任务完全相同,但不在EDT上。

检查

在专用线程中执行冗长GUI交互任务的抽象类

关于如何使用它的所有必要细节都在javadoc中。

听起来像是一项工作


你可以用一个单一线程的“池”来设置它,然后向它抛出任务来为你执行。

应该可以配置一个线程来完成你需要的任务。

SwingWorker是否保证执行顺序?这不完全是我想要的:-我不需要与EDT进行任何交互-我的任务很短,其中有很多,可以随时创建。因此,我需要很多swing工作线程,我不能确定所有的swing工作线程都将共享同一个后台线程。它是异步的,因此没有执行顺序(如果我理解正确的话)。如果希望在后台执行两个后续操作,请使用一个swing worker和两个助手类来执行每个顺序任务。此外,我认为您可以通过ThreadPoolExecutor控制异步线程的数量。我发现这与此要求存在矛盾:“重要:这些任务不能在事件调度程序线程上执行。”Carl,你是什么意思?SwingWorker和需求之间的矛盾,或者与需求本身的矛盾?顺便说一句,SwingWorker在内部使用的正是ThreadPoolExecutor。只有它有一个定义最大线程数的常量。