Я почти уверен, но лучше понять это: если Runnable
запущен в AsyncContext
запроса сервлета, является ли код в методе запуска потокобезопасным? Я предполагаю, что это так. Потому что есть новый Runnable
за нить, не так ли? Может ли кто-нибудь прояснить этот вопрос?Является ли Runnable запущенным AsyncContext в потоке сервлета безопасным?
ответ
Никакой код Java, если явно не написан так, по сути, является потокобезопасным. AsyncContext
предоставляет метод start(Runnable)
, который принимает значение Runnable
. Если у вас есть экземпляр Runnable
и передать его в качестве аргумента в start(..)
, а затем повторно использовать его в каком-то другом потоке, его безопасность потока может быть скомпрометирована.
Более того, если ваш Runnable
был инициализирован некоторым состоянием, которое используется совместно с другими частями вашего приложения, его безопасность потока снова будет неопределенной.
Это все о том, как вы управляете им.
Вы совершенно правы. Мой вопрос был мотивирован тем фактом, что сервлеты всегда используются повторно по потокам, тогда как Runnable создается для каждого запроса (если вы явно не решите его повторно использовать). Но, да, если у меня есть общее состояние во всех этих Runnables, я получаю те же проблемы, что и с сервлетом. – Gregor
- 1. Является ли использование массива в потоке анонимного класса безопасным?
- 2. Является ли Component.getGraphicsConfiguration потоком безопасным?
- 3. Является ли этот Runnable безопасным от утечки памяти?
- 4. Является ли замок() безопасным?
- 5. Является ли сам прирост в потоке C безопасным?
- 6. TestNG: Является ли запуск классов в параллельном потоке безопасным?
- 7. Является ли доступ/установка элементов в потоке Rcpp :: List безопасным?
- 8. Является ли UImage.AsPNG() потоком безопасным?
- 9. Является ли NSPersistentStoreCoordinator Thread безопасным?
- 10. Является ли следующее безопасным?
- 11. Является ли java.nio.file.Files.write (...) безопасным?
- 12. Является ли const_cast безопасным?
- 13. Является ли это безопасным?
- 14. Является ли TcpClient BeginRead/Send потоком безопасным?
- 15. Является ли JavaScript запущенным в UIWebView?
- 16. Является ли javax.servlet.ServletContext set/getAttribute потоком безопасным?
- 17. Является ли поток операторов ++ безопасным?
- 18. Является ли memcpy безопасным процессом?
- 19. Является ли AmazonSimpleNotificationServiceClient поточно-безопасным?
- 20. Является ли атрибут AllowHtml безопасным
- 21. Является ли HttpApplicationState.RemoveAll() потоком безопасным?
- 22. Является ли shutil.make_archive потоком безопасным?
- 23. Является ли поток потока безопасным?
- 24. Является ли Trace.WriteLine потоком безопасным?
- 25. Является ли imagecreatefromjpeg/png безопасным?
- 26. Является ли RNGCryptoServiceProvider.GetBytes потоком безопасным?
- 27. Является ли Java Regex Thread безопасным?
- 28. Является ли LIBSVM потоком безопасным
- 29. Является ли Task.ContinueWith потоком безопасным?
- 30. Является ли AndroidHttpClient потоком безопасным
Если он потребляет что-то из общей памяти, например. «Список» доступен для всех потоков, тогда он не может быть потокобезопасным. –
@Luiggi: Да, вы правы, я не предполагал, что общие ресурсы не используются. – Gregor
@Sotirios: Вы запускаете AsyncContext с Runnable. – Gregor