![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Этап 1. Разработка класса обычного объекта
На первом этапе создадим основной класс Ball потокового объекта, который включает самые необходимые данные:
num – номер обычного объекта, life – признак жизни потока (life= true - поток выполняется, life= false поток завершён), run – признак выполнения потока (run= true - поток выполняется, run= false - поток приостановлен), thread – поток класса Thread.
Включим в класс Ball функции:
Ball () – конструктор класса, ~Balls () – деструктор класса, Start () – запустить обычный объект, Suspend () – приостановить выполнение обычного объекта, Resume () – возобновить выполнение обычного объекта.
Диаграмма класса Ball представлена на рис. 5.3.1.1.
Рис. 5.3.1.1. Диаграмма классов Balls–приложения первого этапа разработки
В примере 5.3.1.1 приведена реализация первого этапа на языке C#. В примере 5.3.1.2 приведена реализация первого этапа на языке Java.
Пример 5.3.1.1. Реализация Balls–приложения первого этапа на языке C#. //////////////////// // C# File BallsCs1.cs using System; using System.Threading;
class Ball // Класс обычного объекта { int num; Thread thread; bool run; bool life; public Ball (int Num) // Конструктор { num= Num; life= false; run= false; Start (); } //--------------- ~Ball () {life= false; } // Деструктор //--------------- public void Start () // Стартовать { if (! run) { run= true; life= true; thread= new Thread (new ThreadStart (BallFunc)); thread.Start (); } } //--------------- public void Suspend () // Приостановить { if (run) { run= false; thread.Suspend (); } } //--------------- public void Resume () // Возобновить { if (! run) { run= true; thread.Resume (); } } //--------------- void BallFunc () // Выполнить поток { int n= 0; while (life) { Console.Write (" Объект {0}", num.ToString ()); Console.WriteLine (" n= {0}", n.ToString ()); n++; Thread.Sleep (10); } Console.Write (" Объект {0}", num.ToString ()); Console.WriteLine (" завершился"); } }; //------------------------------------- class BallsCs1 { static void Main (string[] args) { Ball ball1= new Ball (1); // Создать первый обычный объект Ball ball2= new Ball (2); // Создать второй обычный объект Console.WriteLine (" Объекты функционируют"); Thread.Sleep (20); // Объекты функционируют 20 мс ball1.Suspend (); // Приостановить первый обычный объект ball2.Suspend (); // Приостановить второй обычный й объект Console.WriteLine (" Объекты приостановлены и возобновлены"); ball1.Resume (); // Возобновить выполнение первого объекта ball2.Resume (); // Возобновить выполнение второго объекта Thread.Sleep (20); // Объекты функционируют 20 мс ball1.Suspend (); // Приостановить первый обычный объект ball2.Suspend (); // Приостановить второй обычный объект } } /* Результат: Объекты функционируют Объект 1 n= 0 Объект 2 n= 0 Объект 1 n= 1 Объект 2 n= 1 Объекты приостановлены и возобновлены Объект 1 n= 2 Объект 2 n= 2 Объект 1 n= 3 Объект 2 n= 3 */
Пример 5.3.1.2. Реализация Balls–приложения первого этапа на языке Java. package BallsCj1; //////////////////// //C# File BallsCj1
class Ball implements Runnable // Класс обычного объекта { int num; Thread thread; boolean run; boolean waiting= false; // Признак ожидания выполнения потока boolean life; public Ball (int Num) // Конструктор { num= Num; life= false; run= false; Start (); }
public void Start () // Стартовать { if (! run) { run= true; life= true; thread= new Thread (this); thread.start (); // Запустить поток } } //--------------- synchronized public void Suspend () // Приостановить { if (run) { run= false; waiting= true; // Перейти потоку в состояние ожидания } } //--------------- synchronized public void Resume () // Возобновить { if (! run) { run= true; waiting=false; // Выйти потоку из состояния ожидания notify (); } } //--------------- public void run () // Выполнить поток { int n= 0; while (life) { System.out.print (" object " +num); System.out.println (" n= " +n); n++; try { Thread.sleep (10); synchronized (this) { if (waiting) wait (); } } catch(InterruptedException iE){} } System.out.print (" object " +num); System.out.println (" finished "); } } //------------------------------------- class BallsCj1 { public static void main () { Ball ball1= new Ball (1); // Создать первый обычный объект Ball ball2= new Ball (2); // Создать второй обычный объект System.out.println(" objects are working"); // Объекты функционируют 20 мс try { Thread.sleep (20); } catch(InterruptedException iE){} ball1.Suspend (); // Приостановить первый обычный объект ball2.Suspend (); // Приостановить второй обычный й объект System.out.println(" objects are suspend and are resumed"); ball1.Resume (); // Возобновить выполнение первого объекта ball2.Resume (); // Возобновить выполнение второго объекта // Объекты функционируют 20 мс try { Thread.sleep (20); } catch(InterruptedException iE){} ball1.Suspend (); // Приостановить первый обычный объект ball2.Suspend (); // Приостановить второй обычный объект } } /* Результат: objects are working object 1 n= 0 object 2 n= 0 object 1 n= 1 object 2 n= 1 objects are suspend and are resumed object 1 n= 2 object 2 n= 2 object 1 n= 3 object 2 n= 3 */
|