КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Public Balls ( )
... Этап 2. Разработка класса Balls Этап 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 */
На этом этапе реализуем класс Balls, содержащий массив обычных объектов класса Ball и осуществляющий их одновременный запуск, а также приостановку и возобновление функционирования. Дополнительно к указателю pBall на массив обычных объектов, класс Balls содержит функции, выполняющие запуск (Start), приостановку выполнения (Suspend) и возобновление выполнения (Resume) всей совокупности обычных объектов. Диаграмма классов Balls–приложения второго этапа изображена на рис. 5.3.2.1.
Рис 5.3.2.1. Диаграмма классов Balls–приложения второго этапа
Реализация второго этапа разработки Balls–приложения на языке C# дана в примере 5.3.2.1. Реализация второго этапа разработки Balls–приложенияна языке Java дана в примере 5.3.2.2.
Пример 5.3.2.1. Реализация второго этапа разработки Balls–приложения на языке C#. //////////////////// // C# File BallsCs2.cs // Файл BallsCs2.cs полностью включает файл BallsCs1.cs, дополнив его // нижеследующим описанием класса Balls и изменённой функцией Main //------------------------------------- class Balls // Класс объектов { Ball [] pBall; public Balls () { pBall= new Ball [2]; for (int i= 0; i < 2; i++) pBall[i]=new Ball (i); Start (); } //--------------- public void Start () // Стартовать { for(int i=0; i < 2; i++) { pBall[i]. Start (); } } //--------------- public void Suspend () // Возобновить { for (int i=0; i < 2; i++) pBall[i].Suspend (); } //--------------- public void Resume () // Приостановить { for (int i= 0; i < 2; i++) pBall[i].Resume (); } }; //------------------------------------- class BallsCs2 { static void Main (string[] args) { Balls pBalls= new Balls (); // Создать объект класса Balls Console.WriteLine ("Объекты функционируют"); Thread.Sleep (20); // Объект функционирует 20 мс pBalls.Suspend (); // Приостановить функционирование Console.WriteLine("Объекты приостановлены и возобновлены"); pBalls.Resume (); // Возобновить функционирование Thread.Sleep (20); // Объект функционирует 20 мс pBalls.Suspend (); // Приостановить функционирование } } /* Результат: Потоковые объекты функционируют Объект 1 n= 0 Объект 2 n= 0 Объект 1 n= 1 Объект 2 n= 1 Объекты приостановлены и возобновлены Объект 2 n= 2 Объект 1 n= 2 Объект 1 n= 3 Объект 2 n= 3 */
Пример 5.3.2.2. Реализация второго этапа разработки Balls–приложения на языке Java. package BallsCj2; //////////////////// //C# File BallsCj2
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 Balls // Класс объектов { Ball [] pBall; { pBall= new Ball [2]; for (int i= 0; i < 2; i++) pBall[i]=new Ball (i+1); Start (); } //--------------- public void Start () // Стартовать { for(int i=0; i < 2; i++) { pBall[i]. Start (); } } //--------------- public void Suspend () // Возобновить { for (int i=0; i < 2; i++) pBall[i].Suspend (); } //--------------- public void Resume () // Приостановить { for (int i= 0; i < 2; i++) pBall[i].Resume (); } };
class BallsCj1 { public static void main () { Balls pBalls= new Balls (); // Создать объекты класса Balls System.out.println("objects are working"); // Объекты функционируют 20 мс try { Thread.sleep (20); } catch(InterruptedException iE){} pBalls.Suspend (); // Приостановить объекты System.out.println("objects are suspend and are resumed"); pBalls.Resume (); // Возобновить выполнение объектов // Объекты функционируют 20 мс try { Thread.sleep (20); } catch(InterruptedException iE){} pBalls.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 */
Дата добавления: 2014-01-06; Просмотров: 382; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |