Какое поведение вызывает прерванное исключение?

Я думал, что поделился бы сводкой моего псевдонима. Также я нахожу использование «zsh» великолепно, git it colora все хорошо красит и говорит, что вы хотите, чтобы ветка все время менялась в командной строке.

Для тех, кто покрывает SVN, вы найдете это полезным: (это комбинация идей из разных потоков, я только беру кредит на знание того, как использовать copy / paste)

.gitconfig:
        ls = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative --name-status

>>git ls
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker| 
| A     icds.xcodeproj/project.pbxproj
| A     icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata
| A     icds/AppDelegate.m
| A     icds/Assets.xcassets/AppIcon.appiconset/Contents.json

* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker| 
| D     Classes/AppInfoViewControler.h
| D     Classes/AppInfoViewControler.m
| D     Classes/CurveInstrument.h


.gitconfig: 
       lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>>git lt
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker
* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker
* 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker
* 7373b5e - clean up files from old version (11 hours ago) Jim Zucker
* 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker


.gitconfig
lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>> git lt

commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c
Author: Jim Zucker <jim@stratengllc.com>
Date:   Tue Dec 1 22:23:10 2015 -0800

    New Files from xcode 7

A       icds.xcodeproj/project.pbxproj
A       icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata


commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d
Author: Jim Zucker <jim@stratengllc.com>
Date:   Tue Dec 1 22:17:00 2015 -0800

    Move everything to old

D       Classes/AppInfoViewControler.h
D       Classes/AppInfoViewControler.m
D       Classes/CurveInstrument.h
D       Classes/CurveInstrument.m
30
задан Omar Kooheji 22 October 2008 в 10:41
поделиться

7 ответов

Хорошо, если некоторый другой Поток назовет thread.interupt (), в то время как поток спит, Вы получите Исключение. И да, можно, вероятно, просто поместить попытку.. выгода вокруг сна () и игнорирует его;)

-3
ответ дан Jan Gressmann 22 October 2008 в 10:41
поделиться
  • 1
    Динамическое расширение стека звучит интересным. У Вас есть ссылка? – Don Wakefield 13 April 2010 в 14:17

Это происходит, когда что-то звонит прерывание () на потоке. Эта статья Brian Goetz объясняет механизм прерывания и как необходимо обработать InterruptedExceptions:

"Наиболее распространенный ответ на InterruptedException должен глотать, это - ловит его и ничего не делает (или возможно регистрирует его, который не является немного лучше) - как мы будем видеть позже в Списке 4. К сожалению, этот подход выбрасывает важную информацию о том, что прерывание произошло, который мог поставить под угрозу способность приложения отменить операции или закрыться своевременно".

, "Если Вы ловите InterruptedException, но не можете повторно бросить его, необходимо сохранить доказательство, что прерывание произошло [...]. Эта задача выполняется путем вызова прерывания (), чтобы "повторно прервать" текущий поток".

27
ответ дан Pino 22 October 2008 в 10:41
поделиться
  • 1
    Хм.. I' m не совсем положительный Unixen обеспечивают ту функцию. Но я мог быть очень очень неправым:) Это кажется boost::regex, использовал бы такие функции, если бы они были доступны..., это использует их в Windows. – Billy ONeal 13 April 2010 в 14:17

Основной случай - когда кто-то звонит Thread.interrupt () на Вашем потоке.

может быть более безопасно бросить RuntimeException, если это происходит, когда Вы действительно не ожидаете его, но для очень простых случаев можно, вероятно, проигнорировать его.

3
ответ дан Jon Skeet 22 October 2008 в 10:41
поделиться
  • 1
    Абсолютно - это - один из более противных способов, которыми может быть завершена программа. – Justin Ethier 13 April 2010 в 14:17

От javadocs:

класс InterruptedException

, Брошенный, когда поток ожидает, сон, или иначе приостанавливаемый в течение долгого времени и другой поток прерывает его с помощью метода прерывания в классе Поток.

Hope, которая отвечает на Ваш вопрос.

3
ответ дан Miguel Ping 22 October 2008 в 10:41
поделиться
  • 1
    Да. +1. Кроме того, it' s важный, чтобы отметить, что завершение мгновенно - подобный вызову TerminateProcess. Ни один из Ваших process' хорошие функции завершения работы (т.е. DLL_PROCESS_DETACH, DLL_THREAD_DETACH, и т.д.) назовут. – Billy ONeal 13 April 2010 в 14:12

Как другие сказали, это вызывается некоторым другим потоком, звоня interrupt() на эти Thread объект, который спит.

то, Что это означает на простом английском языке, то, что некоторый другой поток решил отменить поток сна. Блок попытки/выгоды там, таким образом, можно корректно обработать отмену потока, и безопасно очистить любые ресурсы или закрыть любую операцию, которую это делало правильно.

, Если Вы не должны на самом деле делать ни одного из этого, тогда да, Вам все еще нужен пустой блок выгоды. Но это - Java для Вас... †"вЂ" †"вЂ" †"вЂ" †"вЂ" †"вЂ" †"вЂ" †"вЂ" †"Z AJQ15X" †"вЂ" †"вЂ"

8
ответ дан Eric des Courtis 22 October 2008 в 10:41
поделиться
  • 1
    Кроме того, любой ulimit - разрабатывают ограничения во время выполнения, или в случае потоков, любого предельного набора во время создания потока. I' m не уверенный, если, " переопределите stack" Вы имеете в виду " установите его на размер, который не может поддерживать ОС (например, неограниченный), потому что некоторый другой предел будет достигнут first" или " продвиньте слишком много на стеке и превысьте конец " Ничто как наличие 256K автоматического хранения в Вашей рекурсивной функции, промахиваясь по недостаточному количеству " считайте only" страницы защиты стека в конце и получение отказа сегментации или повреждения "кучи" вместо write-to-read-only-page ошибки... – Mike DeSimone 14 April 2010 в 03:33

Некоторые советы от Параллелизма Java на практике:

  • Распространяют исключение (возможно после некоторой определенной для задачи очистки), делая Ваш метод прерываемым методом блокирования, также; или
  • Восстановление состояние прерывания так, чтобы код выше стека вызовов мог иметь дело с ним.
  • Только код, который проводит политику прерывания потока, может глотать запрос прерывания. Задача общего назначения и код библиотеки никогда не должны глотать запросы прерывания.
6
ответ дан jassuncao 22 October 2008 в 10:41
поделиться
  • 1
    На самом деле ограничение является комбинацией возможности обращения платформы, объем памяти, доступный процессу и любым ограничениям, установленным компилятором. В целом приложения могут переопределить стек и выполнить неопределенное поведение. – Thomas Matthews 13 April 2010 в 16:53

InterruptedException является контролируемой исключительной ситуацией поэтому, к сожалению, Вы не можете просто проигнорировать его. В самых простых случаях Вы ничего не должны делать в пункте выгоды, потому что Вы уверены, что этого не произойдет.

От API

, Брошенного, когда поток ожидает, сон, или иначе приостанавливаемый в течение долгого времени и другой поток прерывает его с помощью метода прерывания в классе Поток.

-1
ответ дан Vincent Ramdhanie 22 October 2008 в 10:41
поделиться
  • 1
    здесь на Linux (x86_64), help ulimit говорит, что размер стека может быть получен путем выполнения ulimit -s, который уступает 8192, относительно unlimited приведенный путем выполнения его без эти -s переключатель. Предел по умолчанию, используемый, если ни один не обеспечивается, -f: the maximum size of files written by the shell and its children. YMMV на другом Unixes [Нельды?], но я думал, что на это стоило указать. – Chris Browne 1 June 2012 в 13:44
Другие вопросы по тегам:

Похожие вопросы: