Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2010, 18:12   #1
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию Многопоточность в JAVA

Код:
package uu;
class MyThread extends Thread {
  int count;
   MyThread() {
    count = 0;
  }

  public void run() {
    System.out.println("MyThread starting.");
    try {
      do {
        Thread.sleep(500);
        System.out.println("In MyThread, count is " + count);
        count++;
      } while (count < 5);
    } catch (InterruptedException exc) {
      System.out.println("MyThread interrupted.");
    }
    System.out.println("MyThread terminating.");
  }
}

public class Main {
  public static void main(String args[]) {
    System.out.println("Main thread starting.");
    MyThread mt = new MyThread();
    mt.start();
    do {
      System.out.println("In main thread.");
      try {
        Thread.sleep(250);
      } catch (InterruptedException exc) {
        System.out.println("Main thread interrupted.");
      }
    } while (mt.count != 5);
    System.out.println("Main thread ending.");
  }
}
1)Скажите пожалуйта, зачем нужно исключение InterruptedException
2)
Код:
MyThread mt = new MyThread(); //Это создание объекта  mt класса MyThread 
    mt.start();  //Это запуск метода run
В методе Run описывается сам поток, который будет выполнятся? Именно после строки
Код:
mt.start();
мы запускаем сам поток?
3)Каким методом происходит завершение потока или для этого не нужен метод?

Последний раз редактировалось Syltan; 20.06.2010 в 14:51.
Syltan вне форума Ответить с цитированием
Старый 20.06.2010, 20:55   #2
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

1) исключение InterruptedException - функция sleep(long mm) выбрасывает исключение, поэтому его надо перехватить, тип выбрасываемого исключения InterruptedException. Можешь просто заменить на Exception.
2)функция start - создает поток и запускает его главную функцию run().
3)поток заканчивает свою работу по завершения функции run(). В твоем случае пока count <5 поток будет работать.

P.S. в этой программе работают два потока 1-ый: главный поток приложения, 2-ой созданный тобой.
BleStaR вне форума Ответить с цитированием
Старый 21.06.2010, 16:56   #3
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Вот немного модернизировал код, подкскажите пожалуйста, как доделать его чтоб один поток взаимодействовал с другим потоком.

Код:
package u;
class MyThread1 extends Thread {
  int count1=50;
  int count2=100;
 //выполняеться 2 потока поток метода main и MyThread
  public void run() {
    System.out.println("Запуск потока от класса Thread");
    try {
        int i=10;
        int j=0;
        do {
            System.out.println( "Процес № "+i +"  Процес № " +j);
            i++;
            j++;
            Thread.sleep(250);
        } while ( (i<count1) && (j<count2) );
       
    } catch (InterruptedException exc) {
      System.out.println("Процес прерван.");
    }
  System.out.println("Процес заершился.");
  }
}


//Наследование от интерфейса
class MyThread2 implements Runnable {
  int count;

  MyThread2() {
    count = 0;
  }
  public void run() {
    System.out.println("Запуск потока от интерфейса Runable.");
    try {
      do {
        Thread.sleep(500);
        System.out.println("Процес №" + count);
        count++;
      } while (count < 5);
    } catch (InterruptedException exc) {
      System.out.println("Процес прерван.");
    }
    System.out.println("Процес заершился.");
  }
}

public class Main {
  public static void main(String args[]) {
    //Реализация через интерфейс
    System.out.println("Main thread starting.");
    MyThread1 obj1 = new MyThread1();
    //После вызова метода start() начинаеться выполняться метод run()
    Thread obj11 = new Thread();
    obj1.start();

  


//_____________________________________________________________________
/*MyThread2 объект класса, реализующего интерфейс Runnable.
  Объекты таких классов не являются потоками в чистом виде. Создать поток, использую
  данный объект можно только через конструктор класса Thread - Thread(r Runnable)
 (здесь r = obj2).
*/
   //MyThread2 реализует интерфейс Runnable
    MyThread2 obj2 = new MyThread2();
    //создание потока, который будет запускать нащ раннейбл
    Thread obj22 = new Thread(obj2);
    obj22.start();
   }
}
Syltan вне форума Ответить с цитированием
Старый 21.06.2010, 20:44   #4
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

ну это смотря что ты подразумеваешь под взаимодействием...
ну один из способов: это в одном из потоков введение некоторого поля(метода) доступного для второго потока.
второй способ: это не то что бы взаимодествие... пусть будет некий общий ресурс доступный для обоих потоков. Тока не забудь про синхронизацию, а то может какая нибудь ерунда время от времени появляться!!))
BleStaR вне форума Ответить с цитированием
Старый 22.06.2010, 10:58   #5
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Синхронизация это типа Thread.sleep(250); ?
Syltan вне форума Ответить с цитированием
Старый 22.06.2010, 21:44   #6
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

нет... sleep() - это усыпление потока на определенное количество милисекунд.

синхоронизация заключается в том, что подпроцесс(в нашем случае поток) блокирует объект, с которым работает, чтобы другие подпроцессы не могли обратиться к данному объекту, пока блокировка не будет снята.
BleStaR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность и с++ Koshmarovsky Visual C++ 13 06.09.2010 20:39
Многопоточность CrazyDude Общие вопросы Delphi 1 18.04.2010 19:00
Многопоточность JakSon Общие вопросы Delphi 10 27.12.2009 02:19
Многопоточность. newmister Общие вопросы Delphi 9 24.07.2009 12:54
Многопоточность PUH Помощь студентам 3 06.06.2009 13:54