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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки в Java, хочу простой пример 
:(
    Опции темы
Berliner
Дата 21.3.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здраствуйте, мог бы кто нить подсказать очень простой пример работі с потоками. В Java. А то что я находил и инете для меня біло очень тяжелым. Мне бы синхронизацию и почень простой пример плиз с коментариями
PM   Вверх
LSD
Дата 21.3.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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





--------------------
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   Вверх
GIK
Дата 22.3.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

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



Цитата

Здраствуйте, мог бы кто нить подсказать очень простой пример работі с потоками. В Java. А то что я находил и инете для меня біло очень тяжелым. Мне бы синхронизацию и почень простой пример плиз с коментариями

Дочерние потоки можно реализовать двумя способами, один из них реализация интерфейса Runnable который определяет в себе метод run(). Запуск метода run() порождает новый поток.
Реализация интерфейса Runnable -самый простой способ. Этот интерфейс определяет метод run() c помощъю которого можно запустить поток. Для этого нужно реализовать сласс с интерфейсом Runnable и как следствие определить в нем метод run(), и создать ссылочную переменную на объект-поток Thread
Код

Thread threadInClassA; //переменная с типом [B]Thread[/B] - позволит ссылатся на объет поток
threadInClassA=new Thread(this, "potok№2"); //передаем ссылку на объект поток

Желательно переменную определить непосредственно в классе а не в методе-конструкторе, для того чтобы можно было футболить его по всему коду и за его пределы.

Что делает эта программа:
Запускаем программу с помощью метода main() (создается поток-Главный поток), определяем в этом методе ссылку на главный поток с помощъю метода currentThread()
Код

Thread t1=Thread.currentThread() 

Далее создается объект а с помощю конструктора при этом поток(выполнение программы) переходит в конструктор класса A, где и будем создавать НОВЫЙ объект-поток, но при этом он еще не будет запущен. В конструкторе передаем ссылку на объект-поток
Код

threadInClassA=new Thread(this, "potok№2"); 

В параметрах указываем ссылку на объект который реализует интерфейс Runnable (в данном случае это объкт А) и имя потока. Запуск потока происходит с помошью вызова метода start() который запускает метод run() - с этогто момента и родится новый поток. Главный поток при этом естественно возвращается к недовыполненному методу main(), и возвращается он не после того как зыпустит метод run() а после того как закончит выполнение конструктора A(){}. Вот имем ужа два потока, теперь самое главное чтобы главный поток не закончил свою работу первым, это обязательное требование. Для того чтобы главный поток не закончился первым будем ждать пока второй поток не закончится, делаем это с помошью метода join() (указываем на поток) Второй поток при этом будет выполнять свою работу, работу указанную в методе run().

Логика запуска нового потока через реализацию интерфейса Runnable может показатся немного гипким (корявым если хочеш), НО если хорошенько вкурить....
то далее можеш создавать, творить уже что-то свое.

Код

class A implements Runnable {    
 Thread threadInClassA; 
   A() {
  threadInClassA=new Thread(this, "potok№2"); //Указываем на ЭТОТ объект, на объект который реализует   интерфейс Runnable 
  threadInClassA.start(); //Метод start() вызывает метод run(), а точнее создает новый поток с помощью вызова run()   
   } 
 public void run(){
  try{
   for (int i=5; i>0; i--)
   {System.out.println("Potok");
    threadInClassA.sleep(1000);} 
    }catch(InterruptedException e){System.out.println("Iskluchenie");}
 }    

} 
   class Potoki {
 public static void main(String args[]){
  Thread t1=Thread.currentThread(); 

   A a = new A();
 try {
  a.threadInClassA.join(); //Ожидание окончания работы дочернего  потока  
  
 } catch(InterruptedException e) {System.out.println("Glavni potok zavershon");}
 }
} 

Спрашивай если что не понятно.



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Berliner
Дата 6.4.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасиб за пояснение Только я не понял
Код

 A a = new A();


это создается только один поток а где в коде другой поток?
PM   Вверх
Domestic Cat
Дата 6.4.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Berliner @ 6.4.2006, 05:43 Найти цитируемый пост)
это создается только один поток а где в коде другой поток?

При старте приложения запускается поток main.


--------------------

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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