Timer & TimerTask по сравнению с Потоком + спит в Java

То, что Вы надеетесь делать, сделано при наличии нескольких тем на сервере (theme1.css, theme2.css, theme3.css, и т.д.) и разрешение пользователю выбрать тему, которую он любит. Можно тогда сохранить в базе данных с профилем пользователя тему, которую пользователь выбрал (theme2.css). Когда пользователь тогда отображает свою страницу, Вы включаете в верхней части страницы theme2.css вместо темы default.css.

Это работало бы хорошо с серверной технологией, такой как PHP или ASP.NET или независимо от того, что Вам нравится. Конечно, Вы могли потенциально использовать JavaScript для сохранения cookie на компьютере пользователей, чтобы помнить, что его выбор и использовать JavaScript снова для включает файл , который Вы помнили через cookie.

, Если Вы хотите позволить пользователю управлять точно, что относится к определенным элементам дизайна (таким как цвет заголовка, шрифта, и т.д.) Вы могли снова, использование технологии серверной стороны (лучше в этом случае, по-моему) или JavaScript сохраняет вещи как header=blue, font=Arial и использование , jQuery применяет то, что было сохранено к Вашей странице.

Hope это дает Вам обзор.

103
задан Keshav 4 October 2018 в 09:17
поделиться

3 ответа

Преимущество TimerTask заключается в том, что он намного лучше выражает ваше намерение (т.е. читаемость кода), и в нем уже реализована функция cancel ().

Обратите внимание, что ее можно написать в более короткой форме, а также в вашей собственной пример:

Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(
    new TimerTask() {
      public void run() { NewUploadServer.getInstance().checkAndUploadFiles(); }
    }, 0, 60 * 1000);
67
ответ дан 24 November 2019 в 04:22
поделиться

Timer / TimerTask также учитывает время выполнения вашей задачи, поэтому он будет немного точнее. И он лучше справляется с проблемами многопоточности (такими как предотвращение взаимоблокировок и т. Д.). И, конечно, обычно лучше использовать хорошо протестированный стандартный код вместо какого-то самодельного решения.

13
ответ дан 24 November 2019 в 04:22
поделиться

Есть один важный аргумент против управления этой задачей с помощью потоков Java и метода sleep . Вы используете while (true) , чтобы оставаться в цикле на неопределенное время и перевести поток в спящий режим. Что делать, если NewUploadServer.getInstance (). CheckAndUploadFiles (); занимает некоторые синхронизированные ресурсы. Другие потоки не смогут получить доступ к этим ресурсам, может произойти голодание, которое может замедлить работу всего приложения. Ошибки такого типа сложно диагностировать, и рекомендуется предотвратить их существование.

Другой подход запускает выполнение кода, который важен для вас, то есть NewUploadServer.getInstance (). CheckAndUploadFiles (); , вызвав метод run () вашего TimerTask , одновременно разрешив другим потокам использовать ресурсы.

может произойти голодание, которое может замедлить работу всего приложения. Ошибки такого типа трудно диагностировать, и рекомендуется предотвратить их существование.

Другой подход запускает выполнение кода, который важен для вас, то есть NewUploadServer.getInstance (). CheckAndUploadFiles (); , вызвав метод run () вашего TimerTask , одновременно разрешив другим потокам использовать ресурсы.

может произойти голодание, которое может замедлить работу всего вашего приложения. Ошибки такого типа трудно диагностировать, и рекомендуется предотвратить их существование.

Другой подход запускает выполнение кода, который важен для вас, то есть NewUploadServer.getInstance (). CheckAndUploadFiles (); , вызвав метод run () вашего TimerTask , позволяя тем временем другим потокам использовать ресурсы.

3
ответ дан 24 November 2019 в 04:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: