Java 如何从不同的线程向一个线程添加队列?

Java 如何从不同的线程向一个线程添加队列?,java,multithreading,Java,Multithreading,我正试图找到一种方法,从不同的线程向一个线程添加一个队列 下面是一个例子: public void actionPerformed(ActionEvent e) { System.out.println("something happened."); } 我相信方法actionPerformed将始终在EDT中执行,但由于方法中的代码与swing无关,因此我希望将其安排到不同的线程 有一种方法允许您在EDT中安排任务,如: SwingUtilities.invokeLater(new

我正试图找到一种方法,从不同的线程向一个线程添加一个队列

下面是一个例子:

public void actionPerformed(ActionEvent e) {
    System.out.println("something happened.");
}
我相信方法
actionPerformed
将始终在EDT中执行,但由于方法中的代码与swing无关,因此我希望将其安排到不同的线程

有一种方法允许您在EDT中安排任务,如:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        //insert some code that does something in EDT
    }
});

除了普通线程之外,还有其他方法可以做同样的事情吗?

如果您对要使用的后台线程没有特别的偏好,请尝试

静态
commonPool()
适用于大多数应用程序。公共池由未显式提交到指定池的任何
forkjointtask
使用。使用公共池通常会减少资源使用(其线程在不使用期间缓慢回收,并在后续使用时恢复)

你可以通过多种方式提交作业。我建议通过它来检查工作的状态和结果。它的所有
xxxAsync()
方法都将任务提交到fork-join公共池

如果不关心结果,只需调用
runAsync()
fire-and-forget样式:

CompletableFuture.runAsync(() -> {
    System.out.println("something happened.");
});
或者,如果要计算线程外的值,可以使用方法链接在作业完成时采取操作:

CompletableFuture.supplyAsync(() -> {
    // expensive computation
    return result;
})
.whenComplete((result, exception) -> {
    if (exception == null) {
        System.out.println("result is " + result);
    }
    else {
        // something went wrong
        exception.printStackTrace();
    }
});

如果您对要使用的后台线程没有特别的偏好,请尝试

静态
commonPool()
适用于大多数应用程序。公共池由未显式提交到指定池的任何
forkjointtask
使用。使用公共池通常会减少资源使用(其线程在不使用期间缓慢回收,并在后续使用时恢复)

你可以通过多种方式提交作业。我建议通过它来检查工作的状态和结果。它的所有
xxxAsync()
方法都将任务提交到fork-join公共池

如果不关心结果,只需调用
runAsync()
fire-and-forget样式:

CompletableFuture.runAsync(() -> {
    System.out.println("something happened.");
});
或者,如果要计算线程外的值,可以使用方法链接在作业完成时采取操作:

CompletableFuture.supplyAsync(() -> {
    // expensive computation
    return result;
})
.whenComplete((result, exception) -> {
    if (exception == null) {
        System.out.println("result is " + result);
    }
    else {
        // something went wrong
        exception.printStackTrace();
    }
});