(1) Наследуйте класс от Thread
, переопределяя метод run()
. Внутри run()
, выведите сообщение, затем вызовите sleep()
. Повторите эти действия трижды, а затем вернитесь из run()
. В конструкторе включите сообщение о запуске, а также переопределите finalize()
, чтобы вывести сообщение о завершении. Создайте независимый класс потока, который внутри run()
вызывает System.gc()
и System.runFinalization()
, а также выводит сообщение о успешном выполнении этих операций. Создайте несколько потоков каждого типа и запустите их, чтобы посмотреть, что произойдет.
(2) Измените Counter2.java
, сделав поток внутренним классом и устранив необходимость явного хранения ссылки на объект Counter2
.
( Yöntem 3 ) Измените Sharing2.java
, заменив синхронизацию всего метода run()
в классе TwoCounter
на использование синхронизированного блока внутри этого метода.
(4) Создайте два подкласса Thread
. Первый подкласс должен иметь метод run()
, который начинается первым и захватывает ссылку на второй объект Thread
, после чего вызывает wait()
. Второй подкласс должен вызывать метод modifyAll()
для первого потока через несколько секунд, позволяя ему вывести сообщение.
(5) В Counter5.java
внутри Ticker2
, удалите вызов yield()
и объясните результат. Замените его вызовом sleep()
и снова объясните результат.
Исправлено:
ThreadGroup1.java
, замените вызов sys.suspend()
на вызов wait()
для группы потоков, заставив её ждать две секунды. Для получения правильного результата необходимо получить объект групп потоков.Здесь также следует обратить внимание на то, что вместо sys.suspend()
используется метод wait()
.```markdown
(1) Наследуйте класс от Thread
, переопределив метод run()
. Внутри run()
, выведите сообщение, затем вызовите sleep()
. Повторите эти действия три раза, а затем вернитесь из run()
. В конструкторе включите сообщение о запуске, а также переопределите finalize()
, чтобы вывести сообщение о завершении. Создайте независимый класс потока, который внутри run()
вызывает System.gc()
и System.runFinalization()
, а также выводит сообщение о успешном выполнении этих операций. Создайте несколько потоков каждого типа и запустите их, чтобы посмотреть, что произойдет.
(2) Измените Counter2.java
, сделав поток внутренним классом и устранив необходимость явного хранения ссылки на объект Counter2
.
(3) Измените Sharing2.java
, заменив синхронизацию всего метода run()
в классе TwoCounter
на использование синхронизированного блока внутри этого метода.
(4) Создайте два подкласса Thread
. Первый подкласс должен иметь метод run()
, который начинается первым и захватывает ссылку на второй объект Thread
, после чего вызывает wait()
. Второй подкласс должен вызывать метод modifyAll()
для первого потока через несколько секунд, позволяя ему вывести сообщение.
(5) В Counter5.java
внутри Ticker2
, удалите вызов yield()
и объясните результат. Замените его вызовом sleep()
и снова объясните результат.
```(6) В ThreadGroup1.java
, замените вызов `sys.suspend()` на вызов `wait()` для группы потоков, заставив её ждать две секунды. Для получения правильного результата необходимо получить объектный блок синхронизации.(7) Измените `Daemons.java`, добавив вызов `sleep()` вместо `readLine()` в методе `main()`. Экспериментируйте с различными временами ожидания, чтобы посмотреть, что происходит.
(8) Найдите пример GreenhouseControls.java
из середины главы 7. Он состоит из трех файлов. В классе Event.java
класс Event
основан на мониторинге времени. Измените этот Event
, сделав его потоком. Затем измените остальную часть дизайна, чтобы он мог корректно работать с новым, основанным на потоках Event
.
(7) Измените `Daemons.java`, добавив вызов `sleep()` вместо `readLine()` в методе `main()`. Экспериментируйте с различными временами ожидания, чтобы посмотреть, что происходит.
(8) Найдите пример `GreenhouseControls.java` из середины главы 7. Он состоит из трёх файлов. В классе `Event.java` класс `Event` основан на мониторинге времени. Измените этот `Event`, сделав его потоком. Затем измените остальную часть дизайна, чтобы он мог корректно работать с новым, основанным на потоках `Event`.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )