Решения отдельных заданий можно посмотреть в электронной книжке The Thinking in Java Annotated Solution Guide, доступную за небольшую плату на сайте www.BruceEckel.com.
Наследуйте класс от Thread и переопределите метод run(). Внутри run() напечатайте сообщение и вызовите sleep(). Повторите это три раза и выйдете (return) из run(). Поместите приветственное сообщение в конструктор и переопределите finalaize() чтобы вывести прощальное сообщение. Создайте отдельный вызов процесса, назовите его System.gc() и System.runFinalization() внутри run(), напечатав сообщение, так как они выполняются. Создайте несколько объектов от процессов обоих типов и запустите их чтобы посмотреть, что произойдет.
Измените Sharing2.java добавив блок synchronized внутрь метода run() для TwoCounter вместо синхронизации всего run() метода.
Создайте два подкласса Thread, один, использующий run() для запуска, и перехватывающий ссылку на второй процесс Thread, а затем вызывающий wait(). Вызов run() второго класса должен вызывать notifyAll() для первого процесса после нескольких секунд ожидания, так, чтобы первый процесс при этом вывел сообщение.
В Counter5.java внутри Ticker2, удалите yield() и объясните результат работы. Потом замените yield() на sleep() и объясните этот результат.
В ThreadGroup1.java, замените вызов sys.suspend() на вызов wait() для группы процессов, установив для них ожидание в две секунды. Для того чтобы это работало корректно необходимо установить блокировку для sys внутри блока synchronized.
Измените Daemons.java так, чтобы main() был sleep() вместо readLine(). Поэкспериментируйте с различным значением времени засыпания чтобы увидеть что произойдет.
В Главе 8 найдите пример GreenhouseControls.java, состоящий их трех файлов. В Event.java, класс Event основан на наблюдении времени. Замените Event так, чтобы оно стало процессом Thread, и замените весь пример так, чтобы он работал с новым, основанным на Thread событием Event.
Измените Exercise 7 так, чтобы для запуска системы использовался класс java.util.Timer из JDK 1.3.
Начиная с SineWave.java Главы 13, создайте программу (апплет/приложение используя класс Console) рисующих анимированную синусоиду которая движется аналогично тому, как это происходит в осциллографе, перемещая рисунок с помощью Thread. Скорость перемещения должна управляться с помощью элемента управления java.swing.JSlider.
Измените Exercise 9 так, чтобы было создано несколько звуковых панелей внутри приложения. Количество панелей должно контролироваться либо HTML тэгами, либо параметрами из командной строки.
Измените Exercise 9 так, чтобы класс java.swing.Timer использовался для вывода анимации. Обратите внимание на различия с java.util.Timer.
[70] Runnable было введено в Java 1.0, в то время как внутренние классы появились только в Java 1.1, что необходимо принимать во внимание при объяснение причины существования Runnable. Также, традиционная архитектура множества процессов сосредоточена на выполняемых функциях, а не объектах. Я предпочитаю всегда создавать наследника от Thread если возможно; для меня это выглядит более понятно и гибче в использовании.
[71] The Java Programming Language, написано Ken Arnold и James Gosling, Addison-Wesley 1996 pp 179.
Thinking in Java - The Java Native Interface (JNI)
lektsii.net - Лекции.Нет - 2014-2024 год. (0.007 сек.)
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав