Иллюстрированный самоучитель по Java


           

Один подпроцесс, поставщик, производит вычисления,


Обратимся снова к схеме "поставщик-потребитель", уже использованной в

главе 15.

Один подпроцесс, поставщик, производит вычисления, другой, потребитель, ожидает результаты этих вычислений и использует их по мере поступления. Подпроцессы передают информацию через общий экземпляр st класса store.

Работа этих подпроцессов должна быть согласована. Потребитель обязан ждать, пока поставщик не занесет результат вычислений в объект st, а поставщик должен ждать, пока потребитель не возьмет этот результат.

Для простоты поставщик просто заносит в общий объект класса store целые числа, а потребитель лишь забирает их.

В листинге 17.6 класс store не обеспечивает согласования получения и выдачи информации. Результат работы показан на рис. 17.4.



Листинг 17.6.


Несогласованные подпроцессы

class Store{

private inf inform;

synchronized public int getlnform(){ return inform; } 

synchronized public void setlnform(int n){ inform = n; } 

}

class Producer implements Runnable{ 

private Store st; 

private Thread go; 

Producer(Store st){ 

this.st = st; 

go = new Thread(this); 

go.start(); 

}

public void run(){ 

int n = 0;

Thread th = Thread.currentThread(); 

while(go == th){ 

st.setlnform(n);

System.out.print("Put: " + n + " "); 

n++; 



}

public void stop(){ go = null; 



}

class Consumer implements Runnable{ 

private Store st; 

private Thread go; 

Consumer(Store st){

this.st = st; 

go =-new Thread(this); 

go.start () ; 



public void run(){

Thread th = Thread.currentThread();

while(go == th) System.out.println("Got: " + st.getlnformf)); 

}

public void stop(){ go = null; } 



class ProdCons{

public static void main(String[] args){ 

Store st = new Store(); 

Producer p = new Producer(st); 


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий