1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Выход из шедуллера runTaskTimer

Тема в разделе "Разработка плагинов для новичков", создана пользователем SpokeKamchatka, 6 апр 2018.

  1. Sitmobedaf

    Sitmobedaf Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SiT
    Говно, начнем с того, что я твоего мнения не спрашивал. И повторюсь, мой код работает и для меня более понятный.
     
  2. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Я те сказал по общему принятому стандартну - ООП, с его точки твой код - говно, всем посрать что для тебя он читабельнее, мб для тебя вообще процедурки лучше ооп?
     
  3. Sitmobedaf

    Sitmobedaf Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SiT
    Возможно.
     
  4. Cookie1337

    Cookie1337 Активный участник Пользователь

    Баллы:
    66
    https://hastebin.com/ijoyecofib.java
    Вот самый понятный и простой вариант.
    ООП? Ну, тут явно нужны три парадигмы ООП, КОД КРИТИЧЕСКИЙ, ТО!
     
  5. Cookie1337

    Cookie1337 Активный участник Пользователь

    Баллы:
    66
    Ты же в курсе, что при выполнении runTaskTimer произойдет блокировка тела BukkitRunnable, и чет метод станет чуть чуть медленнее. (Аналогично с this.cancel();)
     
  6. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Вам не надоело эту тему топтать?
     
  7. Cookie1337

    Cookie1337 Активный участник Пользователь

    Баллы:
    66
    Они первые начали! :(
     
  8. bristol

    bristol Активный участник Пользователь

    Баллы:
    46
    Ну, а чего ты хотел то? Джава это оопшный язык. В ооп есть принципы, которые нужно использовать, если ты их не используешь, то код можно назвать говном.
     
  9. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Не, ну так код то вырастет этот, не будет же один шедулер ток, там 5 шедулеров если в коде, эт сколько говна то надо писать.
    Ля с чего бы он стал медленнее? Или ты про то, что там synchronized весит? В однопоточном коде эт никак не повлияет)
     
  10. Cookie1337

    Cookie1337 Активный участник Пользователь

    Баллы:
    66
    Три основных принципа из которых состоит ООП: наследование, инкапсуляция и полиморфизм. 1)Наследование. Если ты найдешь где тут его использовать, то можешь написать, даже интересно, как это у тебя получится. 2)Инкапсуляция. Это тестовый класс, а то есть тут изоляция от остальных модулей не нужна. 3)Полиморфизм. Ну он то тут точно нужен, да?
    Процитирую: "One well-known source has cited that a synchronized method call is as much as 50 times slower than an unsynchronized method call.". (с) https://www.ibm.com/developerworks/library/j-threads1/index.html
     
  11. Cookie1337

    Cookie1337 Активный участник Пользователь

    Баллы:
    66
    "Не, ну так код то вырастет этот, не будет же один шедулер ток, там 5 шедулеров если в коде, эт сколько говна то надо писать. "
    Только вот, код становится проще для понимания. Любой человек который хоть чуть чуть знает Javy, сможет с легкостью понять код и даже что-то в нём изменить. При этом, ваш метод с new BukkitRunnable() наоборот вгонит в заблуждение, и если у вас 5 таких шедулеров, то этому же кодеру придется долго разбираться, что к чему.
     
  12. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ты серьезно считаешь что вызвать сделать дополнительные филды в классе легче чем просто вызвать метод cancel() ?)

    Тут если че инкапсуляция как раз таки и подходит, тебе нужно как раз таки тот id шедулера по-хорошему инкапсулировать от других классов, сделать паблик геттер - надеюсь понимаешь, что хрень, так как это не инкапсуляция. Если по-хорошему делать, то у тебя как раз таки и получится тот же BukkitRunnable)

    И вообще ты с многопоточностью собираешься работать без синхронизации?)
     
  13. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Хоть Java и считается в первую очередь ООП-языком, это не исключает возможности писать в других парадигмах (никто же не запретит писать в процедурном стиле?). Кроме того, что майнкрафт, что современный энтерпрайз — это уже скорее singleton oriented programming.
     
  14. Cookie1337

    Cookie1337 Активный участник Пользователь

    Баллы:
    66
    Ну, мне кажется, что жертвовать скоростью в такой мелочи нельзя.

    Лол, нет. https://hastebin.com/ijoyecofib.java

    Ни разу не было необходимости асинхронно работать с шедулером.
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Моя очередь.
    Код:
    package Example;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class MyTimerTask extends TimerTask {
        private Timer timer;
        private int i;
    
        public MyTimerTask(Timer timer) {
            this.timer = timer;
        }
    
        @Override
        public void run() {
            i++;
            System.out.println(i);
            if (i == 10) {
                timer.cancel();
            }
        }
    }
    Код:
            Timer timer = new Timer();
            timer.schedule(new MyTimerTask(timer), 0, 1000);
     
    Последнее редактирование: 9 апр 2018
  16. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Че чувак где там проседы скорости? Разница с синхронайздом будет видна ток при ~1000 вызововах. И то там там копейки будут с милисекундами
    Ля ору чет. Где ты в майне увидел ентерпрайз?) И где ты увидел синглтоны кроме самого объекта плагина. Вообще если ты пишешь в процедурном стиле на яве тебя смело можно назвать отбросом
     
    Последнее редактирование: 9 апр 2018
  17. Cookie1337

    Cookie1337 Активный участник Пользователь

    Баллы:
    66
    У тебя там блок ссылок? Объясни, зачем замедлять то, что можно не замедлять! Раз так, предлагаю всю работу с локальной бд проводить в мейн треде. Задержка будет минимальной.
     
  18. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Я без понятия, что ты хочешь делать без синхронайзда. Твой int localId может легко закешиться в локал буффере любого треда и все твое говно в миг порушится
     
  19. Cookie1337

    Cookie1337 Активный участник Пользователь

    Баллы:
    66
    Ты точно там впорядке? "Ни разу не было необходимости асинхронно работать с шедулером." чисто цитата одного из предыдущих сообщений. Насчет блокировки я зачекал. Брал я поиск простых чисел наивным методом, то есть асимптотика квадрат. Получилось так 906 ms - с блокировкой и 766 - без блокировки. Че пацаны пару мс?
     
  20. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ты скок раз вызываешь метод с блокировкой?) Дохрена? Сколько раз ты вызываешь бакитовский мтеод cancel() ? Та и я почти уверен то, что у тебя даже тест написан неправильно. Та и вообще я без понятия как ты мог не работать асинхроно с шедулером, ну ладно, у меня это каждый второй таск
     

Поделиться этой страницей