Модераторы: javastic, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ибить потоки! 
:(
    Опции темы
Samuil
  Дата 15.7.2006, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Привет Всем!
Возник вопрос как в j2me можно убить поток Thread?

Код

boolean openThread =true;

  public void run() {
     while (openThread == true) {
      while (Thread.currentThread() == thr) {
        System.out.println(color);

         try {
         Thread.sleep(500);
          }
          catch (Exception e) {}
        if (color == true) {
           color = false;
      }
        else {
           color = true;
         }
        repaint();
     }
}
  

Это сообщение отредактировал(а) Samuil - 15.7.2006, 22:05


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
powerOn
Дата 15.7.2006, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: нет
Всего: 159



Может просто сделать возврат из метода run() при определенных условиях? Например создать переменнную типа boolean состояние которой будет отображать необходимость завершения потока. В методе run() на каждой итерации проверять состояние флага и если необходимо завершать выполнение метода return-ом.  


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LSD
Дата 15.7.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 1
Всего: 538



В Java единственным нормальным способом завершения потока, является выход из метода run().
Варианты реализации этого MoonCat тебе уже подсказал. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samuil
Дата 15.7.2006, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Привет! 
Но вот же :while (openThread == true) {}
Когда приходит время я делаю: openThread =false;
Но ничего не получается smile Почему? smile  


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
LSD
Дата 15.7.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 1
Всего: 538



А внутренний цикл?
Код
while (Thread.currentThread() == thr)
{
 ...
}
 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samuil
Дата 16.7.2006, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Вот он:, В методе paint он прорисовывается и все!
Код

try {
Thread.sleep(500);
}
catch (Exception e) {}
if (color == true) {
color = false;
}
else {
color = true;
}
repaint();
 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
LSD
Дата 16.7.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 1
Всего: 538



Цитата(Samuil @  16.7.2006,  01:16 Найти цитируемый пост)
Вот он:, В методе paint он прорисовывается и все!

При чем тут это. Я говорил, про условие выхода из цикла.
Пока ты не выйдешь из метода, Thread.currentThread() будет возвращать все время одно и тоже значение, а если переменная thr тоже не меняется. То условие всегда будет или true, или false


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samuil
Дата 16.7.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



thr -это сам поток Thread!
Thread thr=new Thread(this);
thr.start(); 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
LSD
Дата 16.7.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 1
Всего: 538



Ну и что ты после этого хочешь? Thread.currentThread() вернет тебе текущий поток, т.е. тот же самый thr. Соответсвенно условие всегда будет true, и из внутреннего цикла ты никогда не выйдешь.

Нафига вообще такое условие понадобилось? 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
BackUp
Дата 16.7.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



LSD, А как Вы посоветуете решить эту проблему? 
PM MAIL   Вверх
LSD
Дата 16.7.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 1
Всего: 538



Цитата(BackUp @  16.7.2006,  15:16 Найти цитируемый пост)
LSD, А как Вы посоветуете решить эту проблему?

В принципе он все правильно сделал, цикл while(openThread == true) с проверкой, что по прежнему надо продолжать выполнение. Единственное, что мешает этому коду работать, это внутренний цикл, с каким-то совершенно непонятным условием. Зачем он тут я не понимаю.
Ну и плюс я бы переписал код так:
Код
private final Object LOCK = new Object();
private boolean running = true;
private boolean color = true;
...
while(running)
{
  try
  {
    synchronized(LOCK)
    {
      LOCK.wait(500);
    }
    System.out.println(color);
    color = !color;
    repaint();
  }
  catch(InterruptedException e)
  {
  }
}

а чтобы остановить поток:
Код
running = false;
synchronized(LOCK)
{
  LOCK.notifyAll();
}
 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samuil
Дата 16.7.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



LSD, СПАСИБО!!!  


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
W0LF
Дата 16.7.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Че-то я не понял...
Цитата

а чтобы остановить поток:
Код

running = false;
synchronized(LOCK)
{
  LOCK.notifyAll();
}
    

notifyAll() пробуждает все приостановленные потоки.
И ваще - поток нельзя убить 


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
LSD
Дата 16.7.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 1
Всего: 538



Цитата(W0LF @  16.7.2006,  18:20 Найти цитируемый пост)
Че-то я не понял...
...
пробуждает все приостановленные потоки.

Пробуждает все потоки, которые выполнили wait() на данном объекте. Можно было бы и без этого, но тогда остановка потока могла занять лишние 500 миллисекунд. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
W0LF
Дата 16.7.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



smile
 


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1467 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.