В последние минуты урока Java о потоках наш профессор предложил обратить особое внимание при разработке сложных приложений на основе Swing, поскольку Swing
не является потокобезопасным. Есть ли какая-то конкретная причина? Swing
не является потокобезопасным из-за конструктивного решения или из-за ограничений программного обеспечения? Заранее благодарим за ответ.Почему нет Swing «потокобезопасный»?
ответ
программирование блог Javin Poul в Java Revisited имеет a great blog post об этом:
Почему свинг не поточно- в Java?
Это решение, принятое там дизайнером, в то время. Поскольку создание поточно-безопасного API требует большой работы, и это часто основано на выгоде, которую вы получаете. Поскольку экраны графического интерфейса в основном обновляются в ответ на действие пользователя, например. когда пользователь нажимает кнопку, а так как события обрабатываются в одном потоке диспетчера событий, легко обновить GUI в этом потоке. Это очень редко, когда запрос на обновление для GUI поступает из другого потока, например. может быть после завершения сетевого запроса или загрузки файла.
Сообщение в блоге разрешило все мои сомнения и было очень подробным, замечательным –
Большинство, если не все, инструментарий GUI не являются потокобезопасными (Qt, Swing, Winforms ...). Создание потокобезопасного инструментария GUI добавит слишком много ненужной сложности. В большинстве случаев достаточно создать быстрый обработчик событий.
Например, у нас есть кнопка, которая вычисляет в течение недели 40 дней с сегодняшнего дня, преобразует температуру Цельсия в Фаренгейт или вычисляет сумму предоставленных значений. Все эти операции можно рассчитать достаточно быстро. Если Swing был потокобезопасным, эти вычисления были бы размещены внутри отдельных потоков, что было бы явно излишним. Таким образом, вместо этого, мы выкладываем только затянувшиеся задачи в нить, такие как сжигание DVD, вычисляя очень сложную задачу, загрузив огромный файл и т.д.
Смотрите этот ответ: Why are most UI frameworks single threaded?
- 1. Почему мой потокобезопасный код не работает?
- 2. Java: класс исключений, потокобезопасный?
- 3. Почему POSIX указывает wctomb как не потокобезопасный, но не mbtowc?
- 4. JTextField - Java swing - нет курсора?
- 5. Как реализовать потокобезопасный сборщик?
- 6. Быстрый, потокобезопасный Python ORM?
- 7. Как вернуть потокобезопасный байт []?
- 8. BroadcastReceiver onReceive() потокобезопасный?
- 9. Как определить потокобезопасный массив?
- 10. NSTimer это потокобезопасный?
- 11. Static Instance Потокобезопасный
- 12. Потокобезопасный декоратор memoize
- 13. Как создать потокобезопасный GetEventHandler()?
- 14. Java: потокобезопасный RandomAccessFile
- 15. Enum.TryParse - это потокобезопасный?
- 16. Контекст-менеджер потокобезопасный
- 17. Is concurrentMap.keySet(). ToArray() потокобезопасный?
- 18. Оптимизированный потокобезопасный список в java
- 19. потокобезопасный против асинхронного-сигнала безопасного
- 20. Swing gui не отображается, но ошибок нет?
- 21. почему java swing таймер автостановок?
- 22. Почему мое приложение Swing замораживается?
- 23. Создать потокобезопасный массив в swift
- 24. BoundedPriorityBlockingQueue - потокобезопасный, блокирующий и ограниченный?
- 25. Как потокобезопасный комплексный объект данных?
- 26. Весна: как сделать потокобезопасный @ Компонент?
- 27. Как сделать потокобезопасный обработчик событий
- 28. Возвращает IEnumerable <> потокобезопасный?
- 29. Существует ли потокобезопасный клиент statsd?
- 30. Java-потокобезопасный hashmap для записи
Смотри также [* java.awt.EventQueue.invokeLater объясняется *] (http://stackoverflow.com/q/22534356/230513). – trashgod