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();
}
});