Java как центр архипелага | страница 13



помощью конструкции try/catch/finally, либо в  его  определении

должна фигурировать конструкция

throws Exception1, Exception2, ...

Пример.

class Foo extends Object {

  . . .

  public void readFromFile (String fn) throws InvalidFormatException {

    FileInputStream fis;

    try {

      fis = new FileInputStream (fn);

      // Читаем данные из файла.

      . . .

      // Если файл имеет неправильный формат,

      // вожбуждаем исключительную ситуацию:

      throw new InvalidFormatException ("Wrong format");

      . . .

    }

    catch (FileNotFoundException e) {

      // Предпринимаем соответствующие действия

    }

    finaly {

      if (fis != null )

        fis.close(); // всегда закрываем файл, если он был открыт

    }

  }

  . . .

}

В этом примере в методе readFromFile могут возникнуть две искл-

чительные  ситуации.  Первая связана с тем, что нужный файл не-

доступен.   Эта   ситуация   обработывается    внутри    метода

readFromFile.  Вторая  исключительная ситуация может вознкнуть,

если файл имеет неправильный формат.  Эта  ситуация  передается

для обработки наверх.

          4.1.6. Механизм потоков

Механизм  потоков - обязательная черта современных операционных

сред. За счет потоков обеспечивается масштабируемость программ-

ных систем, оптимальное использование аппаратных ресурсов,  вы-

сокая  скорость  отклика  на запросы пользователей. Поэтому нет

ничего удивительного в том, что в языке Java  механизм  потоков

представлен с самого начала и в полном об®еме.

В языке Java потоки представлены посредством класса Thread, ин-

терфейса  ъunnable, спецификатора метода synchronized и методов

класса Object wait и notify.

4.1.6.1. Класс Thread и интерфейс ъunnable

Поток (thread) представляет собой отдельный поток управления  в

пределах процесса. Таким образом, у каждого потока есть начало,

последовательность действий, текущее состояние и конец.

Поток  запускается  с  помощью  вызова  метода  start()  класса

Thread. Последовательность действий, выполняемых в рамках пото-

ка, задается в методе run(). Подчеркнем, что  метод  run()  ис-

пользуется только для задания помледовательности действий; явно

вызывать его не только не нужно, но и просто вредно.

Поток  заканчивается  либо  при  завершении  выполнения  метода

run(), либо с  помощью  явных  вызовов  методов  класса  Thread

stop()  или  destroy().  Возобновить работу завершенного потока

невозможно.

Для временной приостановки работы потока с  последующим  возоб-

новлением служат методы suspend(), sleep() и yeild().