С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 12
1

Запуск thread столько раз сколько нужно

19.07.2017, 15:58. Показов 1424. Ответов 3

Author24 — интернет-сервис помощи студентам
Здравствуйте дорогие форумчане!
Нужно мне реализовать один thread внутри того же класса откуда оно и будет вызываться. При чем чтобы thread выполнял run только тогда когда я ему скажу. Т.е. у меня код примерно таков:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class PlayState extends State {
  //тут переменные
  float timer1=0, timer11;
  Thread thr1;
  //...
 
  public PlayState(GameStateManager gsm){
 
   thr1 = new Thread(new Runnable() {
      //private volatil переменные
      public void run() {
        //...
        thr1IsFinished=true;
      }
    }
  }
 
  @Override
  public void update(float dt) {
    //...
    //вот тут какрас штука такая что timer11 не статичен
    if((timer1+=dt)>timer11){
      if (thr1IsFinished){
          thr1IsFinished=false;
          thr1.stop();
          thr1.start();
     }
     timer1%=timer11;
     }
    //...
  }
 
}
При таком коде выходит ошибка у строки start():
Exception in thread "LWJGL Application" java.lang.IllegalThreadStateException

Подскажите плиз что я за ерунду наплел, где ошибка?)) Это первый раз как на процессорную тему напал и может чего не понимать. Видел что в туториалах создают отдельные классы для своего thread, а мне так не канает потому что мой thr1 должен брать значения переменных из PlayState для своих рассчетов.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2017, 15:58
Ответы с готовыми решениями:

Наибольшее число N в массиве, встречающееся столько же N раз
Дан массив чисел. Нужно написать функцию , которая ищет наибольшее N число в массиве, встречающееся...

Вводим букву, выводим ее столько раз, какое место она занимает в алфавите
Очередное задание, которое мне пока не под силу, Пользователь вводит значение Char проверить...

Сколько раз нажимаем на кнопку, столько раз выходит картинка
Как реализовать действие: сколько раз нажимаем на кнопку,столько раз выходит картинка. C#

Вывести запись столько раз, сколько требуется
Приветствую! Допустим, есть таблица: ID|TITLE 1|Иванов 2|Петров 3|Сидоров Есть перечень id....

3
Эксперт функциональных языков программированияЭксперт Java
4542 / 2736 / 486
Регистрация: 28.04.2012
Сообщений: 8,645
19.07.2017, 16:55 2
Цитата Сообщение от pro100kryto Посмотреть сообщение
Подскажите плиз что я за ерунду наплел, где ошибка?
Чтобы не плести ерунду, нужно документацию читать.

public void start()
...
It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.
@Deprecated
public final void stop()

Deprecated. This method is inherently unsafe. Stopping a thread with Thread.stop causes it to unlock all of the monitors that it has locked (as a natural consequence of the unchecked ThreadDeath exception propagating up the stack). If any of the objects previously protected by these monitors were in an inconsistent state, the damaged objects become visible to other threads, potentially resulting in arbitrary behavior. Many uses of stop should be replaced by code that simply modifies some variable to indicate that the target thread should stop running. The target thread should check this variable regularly, and return from its run method in an orderly fashion if the variable indicates that it is to stop running. If the target thread waits for long periods (on a condition variable, for example), the interrupt method should be used to interrupt the wait. For more information, see Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
--- https://docs.oracle.com/javase... hread.html
1
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 12
19.07.2017, 19:42  [ТС] 3
Хорошо, stop совсем убивает а start пишется только один раз.
Дак что происходит с процессом когда он проходит весь код run? Как запустить run еще разок в thread тогда когда тебе это потребуется?
Или тогда нужно по любому в цикл ставить чтобы он вечно проверял таймер типо так?
Java
1
2
3
4
5
6
7
8
9
10
  thr1 = new Thread(new Runnable() {
      //private volatil переменные
      public void run() {
        do{
            if(timer){
               //...
            }
        }while(true)
      }
    }
Просто хотелось чтобы thread просто так не бегал.

Добавлено через 7 минут
Т.е. фактически нужно превратить private void xxx() в thread, т.е. чтоб xxx() запускался как побочный поток.

Добавлено через 1 час 35 минут
Ладно, вроде разобрался. Сделал цикл do-while(!Thread.interrupted()) в run(), проверка таймера
0
Эксперт функциональных языков программированияЭксперт Java
4542 / 2736 / 486
Регистрация: 28.04.2012
Сообщений: 8,645
19.07.2017, 21:08 4
Лучший ответ Сообщение было отмечено pro100kryto как решение

Решение

Цитата Сообщение от pro100kryto Посмотреть сообщение
Ладно, вроде разобрался. Сделал цикл do-while(!Thread.interrupted()) в run(), проверка таймера
М-да… Посмотри лучше в сторону ExecutorService.
1
19.07.2017, 21:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2017, 21:08
Помогаю со студенческими работами здесь

Вывести символ столько раз, сколько введет пользователь
Ребят, подскажите, пожалуйста как вывести символ (любой) столько раз, сколько введет пользователь?...

InterBase: пароль запрашивается столько раз, сколько форм в проекте
Подключаюсь к БД (на базе IB Expert), стандартный набор компонентов для подключения. IBDatabase1:...

Вывести надпись в строке столько раз, сколько выведено строк
Мне нужно сделать что то на подобии прогрессии. Объясняю: Ставится цикл на for(int i=1; i...

Как сделать, чтобы цикл повторялся столько раз, сколько забито в переменной?
Как сделать, чтобы цикл повторялся столько раз, сколько забито в переменной? Например переменная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru