Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
56_Java.pdf
Скачиваний:
210
Добавлен:
18.02.2016
Размер:
2.39 Mб
Скачать

Скачано с сайта http://ivc.clan.su

Код finally определяет некоторые завершающие действия (например, закрытие потоков при вводе/выводе) и выполняется после блока try (если исключения не было) или после обработки исключения в блоке catch. Если имеется оператор finally, оператор catch можно вообще не использовать.

Допустимый синтаксис:

1.try {...} catch(xxxException e) {...}

где xxxException — тип исключения, а е — имя параметра.

2.

try {...}

3.

try {...}

 

 

catch(xxxException e) {...}

 

finally {...

}

 

...

 

 

 

 

finally {...}

 

 

 

2. Как правильно организовывать обработку исключений

1)Поместить код, в котором могут возникнуть исключения, в блок try.

2)Отметить возможные ошибки и убедиться, что в каждом случае генерируется исключение.

3)Организовать перехват и обработку исключений всех типов в блоке catch.

4)При необходимости каждый из операторов, который генерирует исключение, поместить в собственный блок try.

5)Следует сначала выполнять обработку специфических (производных) исключений, а затем — более общих (родительских).

Например:

catch(FileNotFoundException e) {...} catch(IOException e ) {...}

6) Универсальный блок перехвата и обработки исключений может иметь вид: catch(Exception e) {

System.err.println(e.getMessage());

e.printStackTrace();

}

7) Любое исключение, возникающее при выполнении метода, должно быть либо перехвачено и обработано внутри метода, либо описано в объявлении метода после ключевого слова throws. В последнем случае блок try/catch в методе отсутствует, исключение передаётся на обработку коду метода, вызвавшего данный метод, и далее по иерархии вызовов методу, в котором предусмотрена обработка данного исключения, т.е. имеется блок try/catch.

Определение собственных исключений — см. пример ExceptionDemo.java.

Понятия процесса и потока

Современные операционные системы (Unix, Windows 9x/NT/2000, Linux, IBM OS/2) являются многозадачными, поскольку они обеспечивают одновременное (параллельное) выполнение нескольких независимых заданий, совместно использующих один центральный процессор (ЦП).

Вмногозадачной операционной системе (ОС) создаются и действуют такие объекты, как процессы

ипотоки (упрощенные процессы).

Процесс (process) создается, когда программа загружается в память на выполнение (после запуска приложения пользователем). Процесс — это автономная выполняющаяся программа.

Процессу выделяется изолированное адресное пространство, к которому другие процессы не имеют доступа. ОС обеспечивает защиту каждого выполняемого процесса от воздействия других процессов. Если необходимо организовать взаимодействие процессов, используются механизм коллективного доступа, называемый IPC (Inter Process Communication).

Сразу после запуска процесса операционной системой создается один главный поток команд (задача).

27

Скачано с сайта http://ivc.clan.su

Поток (thread — нить процесса) — это независимая последовательность выполняемых команд процессора (фрагмент кода, который выполняется автономно и ориентирован на решение некоторой задачи).

Главный поток, используя средства ОС, может создавать другие потоки. Потоки выполняются автономно, независимо друг от друга в рамках одного процесса.

В отличие от процессов, потоки команд не защищены друг от друга средствами ОС. Все потоки, создаваемые процессом, выполняются в адресном пространстве этого процесса и имеют доступ к ресурсам процесса. (Однако поток одного процесса не имеет доступа к ресурсам потока другого процесса, так как они работают в разных адресных пространствах.)

Основное преимущество потоков заключается в том, что они запускаются очень быстро, тогда как запуск нового процесса — длительная процедура. (Так, чтобы разделить существующий процесс на два независимых, операционная система создает полную копию памяти процесса, после чего запускает один поток вычислений в первой копии, а другой — во второй.)

В современных многозадачных ОС могут одновременно работать несколько процессов, а в рамках одного процесса могут выполняться несколько потоков команд (задач). Время ЦП делится между потоками.

При выполнении программы на языке Java виртуальная Java-машина (например, JVM браузера) использует собственный процесс. В пределах Java-программы (например, апплета) может быть запущено требуемое количество потоков команд.

Для поддержки многопоточности в Java используется класс java.lang.Thread (обеспечивается встроенная поддержка многопоточности).

Конструкторы класса Thread

В классе определено 7 конструкторов. Самый простой — конструктор без параметров. Самому сложному конструктору передается три параметра (в остальных версиях конструктора один или два параметра можно опустить):

ThreadGroup group — ссылка на объект класса ThreadGroup, т.е. на группу потоков, в которую должен быть помещен новый создаваемый поток. Класс ThreadGroup предоставляет методы для эффективного управления одновременно всеми потоками группы.

Если этот параметр в конструкторе опущен, новый объект класса Thread становится членом текущей группы потоков приложения.

Runnable target — ссылка на объект класса, реализующий интерфейс java.lang.Runnable. (Этот интерфейс реализует и сам класс Thread.) В интерфейсе Runnable объявлен единственный метод run(). Если при создании нового объекта Thread указывается объект target (так называемый целевой объект), то для запуска потока команд объект Thread будет вызывать метод run()

указанного целевого объекта.

Если параметр типа Runnable не указывается в конструкторе, новый объект Thread будет запускать поток посредством вызова своего собственного метода run().

String name — значение этого параметра определяет имя нового объекта Thread.

Наиболее важные методы класса Thread

void start() — метод используется для запуска на выполнение соответствующего потока. При этом JVM вызывает метод run() данного объекта Thread и делает поток активным.

Вызов start() для потока возможен один раз. Повторное обращение приводит к генерации исключения IllegalThreadStateException.

void run() — этот метод выполняется как поток команд данного объекта типа Thread. Тело метода

— последовательность выполняемых команд. Если для объекта типа Thread указан целевой

28

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]