2015-09-28 5 views
1

У меня есть код, который я изменяю. Не вдаваясь в огромные подробности о том, что он на самом деле делает, его можно суммировать, создав файл, а затем отправив его на принтер. По существу следующее:Состояние гонки принтеров?

File file = new File("/tmp/12345.pdf"); 
//Lots of magical code that creates/writes to said file 
... 
... 
... 
//sendToPrinter essentially builds up a print command to send to /usr/bin/lp and then executes it. 
sendToPrinter(printer, details, file); 

file.delete();// This is the line I'm curious about. 

Мой вопрос заключается в том, что вызов ПОЛ сделан прежде чем мы получим file.delete(). Однако возникает ли риск создания условия гонки, когда я фактически удаляю файл до того, как принтер будет готов?

С предварительного тестирования у меня еще есть проблема, но что-то об этом беспокоит меня. Я создал риск состояния гонки, выполнив это?

Редактировать: Уточнение, основанное на комментариях. Да, я использую lp, и sendToPrinter, похоже, ждет кода возврата. Код не является асинхронным.

+0

Предполагая, что вы имеете в виду вы выполняете внешний '/ USR/BIN/lp' (или аналогичный) команду, она будет зависеть от того ждет ли sendToPrinter(), пока команда LP не будет завершен или не – nos

+0

Is ваша программа синхронна или асинхронна? вы работаете на нескольких потоках? –

+2

Что такое 'sendToPrinter (...)'? Если это асинхронно (что я сомневаюсь в этом), тогда «да», у вас может быть состояние гонки; иначе (скорее) нет. –

ответ

0

С док

Джойн метод позволяет один поток ждать завершения другого. Если t - объект Thread, поток которого в настоящее время выполняется,

t.join(); заставляет текущий поток приостанавливать выполнение до тех пор, пока поток t не завершится.

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()