Студопедия

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

КАТЕГОРИИ:

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






Этап 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.su - Мои Лекции - 2015-2024 год. (0.021 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал