2016-09-03 6 views
0

В последние минуты урока Java о потоках наш профессор предложил обратить особое внимание при разработке сложных приложений на основе Swing, поскольку Swing не является потокобезопасным. Есть ли какая-то конкретная причина? Swing не является потокобезопасным из-за конструктивного решения или из-за ограничений программного обеспечения? Заранее благодарим за ответ.Почему нет Swing «потокобезопасный»?

+0

Смотри также [* java.awt.EventQueue.invokeLater объясняется *] (http://stackoverflow.com/q/22534356/230513). – trashgod

ответ

6

программирование блог Javin Poul в Java Revisited имеет a great blog post об этом:

Почему свинг не поточно- в Java?

Это решение, принятое там дизайнером, в то время. Поскольку создание поточно-безопасного API требует большой работы, и это часто основано на выгоде, которую вы получаете. Поскольку экраны графического интерфейса в основном обновляются в ответ на действие пользователя, например. когда пользователь нажимает кнопку, а так как события обрабатываются в одном потоке диспетчера событий, легко обновить GUI в этом потоке. Это очень редко, когда запрос на обновление для GUI поступает из другого потока, например. может быть после завершения сетевого запроса или загрузки файла.

+0

Сообщение в блоге разрешило все мои сомнения и было очень подробным, замечательным –

5

Большинство, если не все, инструментарий GUI не являются потокобезопасными (Qt, Swing, Winforms ...). Создание потокобезопасного инструментария GUI добавит слишком много ненужной сложности. В большинстве случаев достаточно создать быстрый обработчик событий.

Например, у нас есть кнопка, которая вычисляет в течение недели 40 дней с сегодняшнего дня, преобразует температуру Цельсия в Фаренгейт или вычисляет сумму предоставленных значений. Все эти операции можно рассчитать достаточно быстро. Если Swing был потокобезопасным, эти вычисления были бы размещены внутри отдельных потоков, что было бы явно излишним. Таким образом, вместо этого, мы выкладываем только затянувшиеся задачи в нить, такие как сжигание DVD, вычисляя очень сложную задачу, загрузив огромный файл и т.д.

Смотрите этот ответ: Why are most UI frameworks single threaded?

Смежные вопросы