java - 在单独的 JavaFX 线程中排队打印作业

标签 java multithreading javafx concurrency queue

目前我正在 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/

相关文章:

java - Android中如何重用onClickListener

java - 使用 CouchBase-Lite 移动设备进行单元测试,无需 Android 应用程序上下文

java - NullPointerException 和 Android ListView

c# - 循环中的 WPF 应用程序,如何不让整个应用程序卡住?

Java 10 JavaFX java.lang.IllegalAccessError

java - 将字符串与一组值进行比较并返回值的最佳方法

java - 从其他线程更新 AtomicInteger

Python 多处理和管理器

JavaFX 按钮栏布局 - 方向和空间分布

java - 从第一个 Controller 传递值后,第二个 Controller 中不会显示值