目前我正在 Java/JavaFX 中试验并发。打印必须在不同的线程中运行,否则会使 JavaFX 主线程卡住几秒钟。现在我的打印是用这个简化的例子完成的。
public void print(PrintContent pt) {
setPrintContent(pt);
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
// send content to printer
}
使用此代码,我可以将许多打印作业并行发送到我的打印机。因此,我收到错误消息,告诉我我的打印机一次只能处理 1 个打印作业。因为我知道 Threads 不能被重用,所以我想知道是否有可能将 Threads 排队,这样我的打印机一次只能处理一个打印作业。
非常感谢您付出的努力和时间。
最佳答案
使用 single threaded executor执行打印作业。它将创建一个(并且只有一个)后台线程并对作业进行排队:
// it might be better not to make this static; but you need to ensure there is
// only one instance of this executor:
private static final Executor PRINT_QUEUE = Executors.newSingleThreadExecutor();
// ...
public void print(PrintContent pt) {
PRINT_QUEUE.execute(() -> {
// send content to printer
});
}
关于java - 在单独的 JavaFX 线程中排队打印作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39102638/