|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Вопрос 1: Для каждой из следующих задач определите, какой поток она должна быть выполнена в и почему.
Ответ 1:
setFont от любого другого потока.Вопрос 2: Один поток не является привилегированным потоком для любой из задач, упомянутых в предыдущем вопросе. Назовите этот поток и объясните, почему его приложения столь ограничиваются.
Ответ 2: начальные потоки запускаются, первая задача GUI на событии диспетчеризируют поток. После этого программа Swing прежде всего управляется событиями GUI, которые инициировали задачи на событии, диспетчеризируют поток и рабочий поток. Обычно, начальные потоки не оставляют ни с чем сделать.
Вопрос 3: SwingWorker имеет два параметра типа. Объясните, как эти параметры типа используются, и почему часто не имеет значения, каковы они.
Ответ 3: параметры типа определяют тип окончательного результата (также тип возврата doInBackground метод) и тип промежуточных результатов (также параметр вводит для publish и process). Много фоновых задач не обеспечивают заключительные или промежуточные результаты.
Вопрос 1: Измените
protected Object doInBackground() {
long heads = 0;
long total = 0;
Random random = new Random();
while (!isCancelled()) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
//Cancelled!
return null;
}
total++;
if (random.nextBoolean()) {
heads++;
}
publish(new FlipPair(heads, total));
}
return null;
}
try ... catch причины doInBackground возвратиться, если прерывание получается, в то время как поток спит. Вызов cancel с параметром true гарантирует, что прерывание отправляется, когда задача отменяется.