мы можем просто добавить несколько тривиальных операторов, таких как single; или int test = 0 между операциями P и V, что создаст вертикальный разрыв между двумя запрещенными областями, так что потоки могут в конечном итоге пройти через этот разрыв, как показано на рисунке ниже
blockquote>first ";" (что вы ожидаете получить для того, что сгенерировано компилятором?) или
int test = 0;
не создаст пробел, и даже когда выполнение или потоки асинхронны, вы не можете предполагать что-то об их выполнении, и именно поэтому у вас есть мьютексы btwИтак, если вам нужно получить несколько мьютексов, это должно быть сделано в одном и том же порядке во всех потоках. Очевидно, что мьютексы - не единственный способ зайти в тупик, все точки синхронизации должны быть приняты во внимание
Я бы попробовал Desktop.open (File)
, который:
Запускает связанное приложение для открытия файла.
Итак, этот код должен помочь:
if (Desktop.isDesktopSupported()) {
try {
File myFile = new File("/path/to/file.pdf");
Desktop.getDesktop().open(myFile);
} catch (IOException ex) {
// no application registered for PDFs
}
}
3-и партийные приложения не могут получить доступ к src dir в Вашем приложении, в случае, если, когда Ваше приложение собираются в архиве банки. Необходимо поместить файл отдельно от src.
, Конечно, Java находит значки, потому что это - API Java. Можно получить доступ к любым ресурсам в src папке через, следуют методам:
URL url = getClass().getResource("/path/in/src");
File file = new File(url.toURI());
я в настоящее время использую ниже:
if (Desktop.isDesktopSupported()) {
try {
URL url = getClass().getResource("/pdf/XXXX.pdf");
File myFile = new File(url.toURI());
Desktop.getDesktop().open(myFile);
} catch (IOException | URISyntaxException ex) {
// no application registered for PDFs
}
}
Вы можете использовать среду выполнения для выполнения и создания сценариев, а также существует несколько программ просмотра Java PDF (например, Icepdf, JPedal, PDFRenderer).