Нет, нет.Ваш единственный выбор без большого колдовства - вызвать interrupt () и дождаться, пока он не вызовет блокирующий вызов.В этот момент он сгенерирует исключение InterruptedException, которое должно иметь место для завершения потока.
Если он находится в цикле, таком как while(1);
, вы не сможете сделать многое;вам нужно исправить свою ветку, чтобы она этого не делала, или хотя бы проверить флаг и остановить себя.
Например, вы можете переписать:
while(1) {
doWork();
}
как:
class Whatever {
private volatile boolean stop = false;
...
while (!stop) {
doALittleWork();
}
...
}
Раньше был метод Thread.stop()
, который делает это, но не рекомендуется по очень-очень веским причинам и не должен использоваться.
РЕДАКТИРОВАТЬ: Поскольку вы, по-видимому, запускаете интерпретатор, вам нужно подключиться после выполнения каждого оператора (или около того) и проверить свою волшебную переменную stop
и, если это так, прекратить выполнение Lua.С другой стороны, у среды выполнения Lua может быть свой собственный флаг завершения, который вы можете использовать - я искал документацию, но их сайт ужасен, поэтому вам, возможно, придется взглянуть на код для этого.
Помимо этого, вывозможно, придется добавить исправления в источник Lua4j вручную, чтобы добавить эту функцию.Ваши возможности довольно ограничены, и в конечном итоге Нить должна каким-то образом управлять своей собственной судьбой.