Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Class Obs
{ Public int num, n; Public Obs (int num, int n) {this.num= num; this.n= n; } int getNumber(){return num; } int getN(){return n; } } class Ball extends Observable 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++; // Уведомить SetChanged(); NotifyObservers(new Obs(num, n)); try { Thread.sleep (10); synchronized(this) { if(waiting) wait(); } } catch(InterruptedException iE){} } System.out.print(" object " +num); System.out.println(" finished "); } }
//------------------------------------- class Balls implements Observer // Класс объектов { Ball [] pBall; public Balls () { pBall= new Ball [2]; for (int i= 0; i < 2; i++) { pBall[i]=new Ball (i+1); pBall[i].addObserver(this); } 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 (); }
public void update (Observable r, Object ob) // Обработчик события ev { Obs obs= (Obs) ob; System.out.print(" object num= " + obs.num); System.out.println(" n= " + obs.n); }
};
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 num= 1 n= 0 object 2 n= 0 object num= 2 n= 0 object 1 n= 1 object num= 1 n= 1 object 2 n= 1 object num= 2 n= 1 objects are suspend and are resumed object 1 n= 2 object num= 1 n= 2 object 2 n= 2 object num= 2 n= 2 object 1 n= 3 object num= 1 n= 3 object 2 n= 3 object num= 2 n= 3 */
|