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

Стартап Использование потоков в bukkit плагинах

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

  1. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Как в bukkit плагинах создавать потоки? Пробовал изучать другие плагины, но нигде не видел использования обычных java потоков. Зато видел конструкции из шедулера и ранабла, но где-то на форуме читал, что это не другой поток, а выполнение ранабла в один тика, ну или как-то так.
     
  2. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
  3. kirill2011s

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

    Баллы:
    103
    Код:
    new Thread(new Runnable() {
    
    @Override
    public void run() {
    //Тут то, что должно выполняться в отдельном потоке
    }
    
    }).start();
    
     
  4. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Спасибо
     
  5. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Я дал прямую ссылку 3 часа назад, а меня никто не послушал.
     
  6. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Тебе тоже спасибо, но мне было лень читать) А так как я просто об этом задумался и это мне не срочно, то проще было подождать готовый ответ, чем читать...
     
  7. kirill2011s

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

    Баллы:
    103
    И все же, лучше бы почитали, там много полезной информации.
     
  8. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Почитаю...
     
  9. almohax

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

    Баллы:
    68
    Имя в Minecraft:
    almohax
    ПАМОГИТЕЕЕ
    кароче создал поток и по своему методу и повашему но когда дело доходит в нем до
    w.getBlockAt(xb, yb, zb).breakNaturally();
    поток крашется ээ подскажите я чтото не добавил в него


    @Override
    public void run() {
    int t=0;
    while(t==0){
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    try {
    DB.ReadDBdrop();
    } catch (SQLException e1) {
    e1.printStackTrace();
    }
    Bukkit.getLogger().info("time2");
    }
    }
    }).start();



    в чем дело
     
  10. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    С Bukkit API нельзя работать асинхронно.
     
  11. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Можно, но только выполнять действия, связанные с миром и игроками нельзя.
     
  12. almohax

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

    Баллы:
    68
    Имя в Minecraft:
    almohax
    блин это бред какой то, значит данные я могу получать, а правит их я не могу
    я написал плагин с физику для блоков но в общем потоке это тормозит сервер , кроме как использование потоков нет другого варианта , может кто что посоветует.
    у меня на сервере 2 ксеона в суме 24 ядра ну длин пипец и не ужелинельзя на другой поток перекинуть
     
  13. kirill2011s

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

    Баллы:
    103
    http://habrahabr.ru/post/164487/
    http://www.skipy.ru/technics/synchronization.html
    http://www.helloworld.ru/texts/comp/lang/java/java5/vol10/ch5.html
    1 минута гуглежа по запросу "синхронизация потоков Java"
     
  14. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Нуну, для синхронизации надо чтобы главный поток тоже синхронизировался, а он этого не делает.
    Нельзя. Сколько раз уже писал что майн однопоточный, нет всё равно находятся люди...
     
  15. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Использование потоков применительно к плагинами Bukkit в наиболее удачной форме это, имхо, создание потока для трудоёмких задач, не связанных с самим игровым процессом. Наилучший вариант:
    • Появилась необходимость в продолжительном процессе
    • Создался поток, делает своё дело, читая объекты Bukkit API, либо (лучше) получив их при создании.
    • По завершении работы на ближайший тик планируется синхронное действие.
    К примеру, очень неплохо делать в параллели запросы к мускулу, особенно постороннему.
     
    Последнее редактирование: 20 янв 2015
  16. almohax

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

    Баллы:
    68
    Имя в Minecraft:
    almohax
    то есть предлогаиш делать вычесление в отдельном потоке и заносить данные в базу , а основной поток просто раз в тик используеть данные готовые
     
  17. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Вообще, это обязательно надо делать, чтобы сервер не тормозил из-за задержек ответа от внешнего ресурса.
     
  18. almohax

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

    Баллы:
    68
    Имя в Minecraft:
    almohax
    я просто хотел чтоб и вычислялось и дропалось в отдельном потоке, ну походу дроп нельзя сделать
     
  19. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Мне когда-то необходимо было из асинк потока взаимодействовать с API
    В итоге сделал так:
    1) Создаем таск с действием которое нам необходимо
    2) Вызываем его из асинка.
    Done

    А вообще в большинстве случаев таск со всем справится, не считая вычислений

    Упс.. Не заметил что это уже сообщили выше.
    Темунечитай@повторноотвечай
     
  20. almohax

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

    Баллы:
    68
    Имя в Minecraft:
    almohax
    так в итоге как мне поступить?
    так правильно будит?
    отправляю блок на вычисление в отдельный поток > результат закидываю в базу
    в основном потоке в таймере вытаскиваю данные по 1 из базы и дропаю раз в (2 тика)
     

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