Думай на Java

       

Решения отдельных заданий можно посмотреть


Решения отдельных заданий можно посмотреть в электронной книжке 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.
    [ ] [ ] [ ] [ ] [ ]

    Содержание раздела