Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

CraftCoder

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

@Override
public void run() {
//Тут то, что должно выполняться в отдельном потоке
}

}).start();
 
Я дал прямую ссылку 3 часа назад, а меня никто не послушал.
Тебе тоже спасибо, но мне было лень читать) А так как я просто об этом задумался и это мне не срочно, то проще было подождать готовый ответ, чем читать...
 
Тебе тоже спасибо, но мне было лень читать) А так как я просто об этом задумался и это мне не срочно, то проще было подождать готовый ответ, чем читать...
И все же, лучше бы почитали, там много полезной информации.
 
ПАМОГИТЕЕЕ
кароче создал поток и по своему методу и повашему но когда дело доходит в нем до
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();



в чем дело
 
блин это бред какой то, значит данные я могу получать, а правит их я не могу
я написал плагин с физику для блоков но в общем потоке это тормозит сервер , кроме как использование потоков нет другого варианта , может кто что посоветует.
у меня на сервере 2 ксеона в суме 24 ядра ну длин пипец и не ужелинельзя на другой поток перекинуть
 
блин это бред какой то, значит данные я могу получать, а правит их я не могу
я написал плагин с физику для блоков но в общем потоке это тормозит сервер , кроме как использование потоков нет другого варианта , может кто что посоветует.
у меня на сервере 2 ксеона в суме 24 ядра ну длин пипец и не ужелинельзя на другой поток перекинуть
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"
 
Нуну, для синхронизации надо чтобы главный поток тоже синхронизировался, а он этого не делает.
блин это бред какой то, значит данные я могу получать, а правит их я не могу
я написал плагин с физику для блоков но в общем потоке это тормозит сервер , кроме как использование потоков нет другого варианта , может кто что посоветует.
у меня на сервере 2 ксеона в суме 24 ядра ну длин пипец и не ужелинельзя на другой поток перекинуть
Нельзя. Сколько раз уже писал что майн однопоточный, нет всё равно находятся люди...
 
Использование потоков применительно к плагинами Bukkit в наиболее удачной форме это, имхо, создание потока для трудоёмких задач, не связанных с самим игровым процессом. Наилучший вариант:
  • Появилась необходимость в продолжительном процессе
  • Создался поток, делает своё дело, читая объекты Bukkit API, либо (лучше) получив их при создании.
  • По завершении работы на ближайший тик планируется синхронное действие.
К примеру, очень неплохо делать в параллели запросы к мускулу, особенно постороннему.
 
Последнее редактирование:
то есть предлогаиш делать вычесление в отдельном потоке и заносить данные в базу , а основной поток просто раз в тик используеть данные готовые
 
К примеру, очень неплохо делать в параллели запросы к мускулу, особенно постороннему.
Вообще, это обязательно надо делать, чтобы сервер не тормозил из-за задержек ответа от внешнего ресурса.
 
я просто хотел чтоб и вычислялось и дропалось в отдельном потоке, ну походу дроп нельзя сделать
 
Мне когда-то необходимо было из асинк потока взаимодействовать с API
В итоге сделал так:
1) Создаем таск с действием которое нам необходимо
2) Вызываем его из асинка.
Done

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

Упс.. Не заметил что это уже сообщили выше.
Темунечитай@повторноотвечай
 
так в итоге как мне поступить?
так правильно будит?
отправляю блок на вычисление в отдельный поток > результат закидываю в базу
в основном потоке в таймере вытаскиваю данные по 1 из базы и дропаю раз в (2 тика)
 

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

Назад
Верх