Цитата: "... вместо того, чтобы полностью изолировать программу от оборудования с помощью драйвера, в Barrelfish есть своего рода база данных, в которой хранится низкоуровневая информация об оборудовании. Ядро системы однопоточно и непрерывно. Планирование происходит одновременно с передачей сообщений, а получение сообщения просто активирует поток ожидания. В ОС также используются концепты микроядер, согласно которой драйвера выполняются в защищенной среде, например в L4."
- Похоже, что многопоточность реализуется по "правилу одного потока", которое следует применять при использовании Swing.
В Swing есть очередь выполнения, и есть диспетчер событий этой очереди. К этому диспетчеру событий мы можем обратиться из любого потока. Диспетчер событий просто поставит в очередь то действие, которое вы хотите чтобы оно выполнилось. Никаких обращений к компонентам Swing (хотя есть исключения, в частности некоторые read-свойства можно использовать) - только через этот диспетчер.
После постановки вашего действия в очередь событий, вы можете как "заблокироваться" на этом (дождаться выполнения, выполнение ведь, по своему характеру - является отложенным), а можете и асинхронно - выполнять что-то либо в программе, предполагая что в Swing-е со временем что-то изменится, то что вам нужно (иногда это очень удобно, например вы постоянно "пингуете" эту очередь, добавляя туда, например, новые данные индикации загрузки - на сколько система будет успевать - она будет изображать вашу индикацию загрузки).
Пример кода:
/* Без блокировки.
* Если нужно с блокировкой, т.е. дождаться выполнения,
* то используем метод EventQueue.invokeAndWait(...)
*/
EventQueue.invokeLater
(
new Runnable()
{
public void run()
{
label.setText(percentage+"% выполнено");
}
}
);
Новая ОС, в дополнении к этому, по видимому применяет аналог транзакционной памяти, которую вводят в .NET 4.
В заключении скажу, что в J2SE 6 - добавили разработанный одним из программистов класс SwingWorker, который капельку упрощает пример, описанный выше (инкапсулирование + паттерн Template Method - проще говоря вам предоставляется метод для реализации задачи, и механизм для запуска всего).
Ну а
Кому любопытно и кто кликнет по ссылке выше о книге - там уже появился в том числе и мой комментарий: :)
"Книга, конечно, хорошая, но объем 8-ого издания стал меньше на процентов 10%, чем в 7-ом издании (сравниваю по двум томам).
Опечаток больно много. Но, как написали ниже, все же не критично (но переводчику и корректору с большими ... ой, ушами - уши бы я открутил...) "
0 коммент.:
Отправить комментарий