Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Этап 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

*/

 


.

mylektsii.ru - Мои Лекции - 2015-2019 год. (0.011 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал