В настоящее время я экспериментирую с параллелизмом в Java/JavaFX. Печать должна выполняться в другом потоке, иначе это приведет к замораживанию основного потока JavaFX в течение нескольких секунд. Сейчас моя печать выполняется с помощью этого упрощенного примера.Задачи очереди печати в отдельной отдельной теме для JavaFX
public void print(PrintContent pt) {
setPrintContent(pt);
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
// send content to printer
}
С помощью этого кода я отправляю много заданий на печать параллельно с моим принтером. Поэтому я получаю сообщение о том, что мой принтер может обрабатывать только одно задание печати за раз. Поскольку я знаю, что Threads нельзя использовать повторно, я хотел бы знать, есть ли возможность помещать в очередь Threads, так что мой принтер обрабатывает только одно задание на печать за раз.
Большое спасибо за ваши усилия и ваше время.
Обратите внимание, что, помимо проблемы отправки несколько заданий печати на принтер, код также страдает от нескольких потоков, пытающихся получить доступ к такому же состоянию. Вызывая 'setPrintContent (pt)' каждый вызов 'print (...)' собирается установить 'printContent' на другое значение; созданные вами потоки будут пытаться получить доступ к этому значению в некоторой (неопределенной) точке в будущем. Нет никакой гарантии, что фоновые потоки будут видеть правильный печатный контент. –
Вы абсолютно правы. Я получаю исключения, особенно когда я отправляю 2 и более заданий печати подряд в течение очень короткого периода времени. – Chiggiddi
Это не вызовет исключений, это просто вызовет неправильную печать. Исключения из проблемы, которую вы уже определили. –