Добрый день,впервые работаю с потоками и возникла проблема в синхронизации.Потоков всего два - А генерирует значения а B его забирает и выводит себя столько раз,сколько получило от А,потоки общаются между собой через экземпляр класса Callme. Задача осложняется тем,что **кроме методов wait и notify использовать ничего нельзя**,даже флаги. package 5variant_3_lab; class A implements Runnable{//Поток созданный через реализацию Runnable Thread t; Callme target; int i;//переменная для вывода значения генератора public A(Callme targ){ target = targ; t=new Thread(this,"Поток А"); t.start(); } public void run(){ synchronized(target){ try{ i=target.generator(); System.out.println("Поток A сгенерировал значение ["+i+"]"); target.notify(); //Пробудить другой поток target.wait();//Перейти в спящий режим самому } catch(InterruptedException e){} } } } class Callme{ int count; int i; synchronized int common(){ count=i; return count; } synchronized int generator(){ i = (int)(9 * Math.random() + 1); return i; } } class B extends Thread{//Поток созданный через расширение класса Thread Callme target; int count;// Переменная для хранения значения из метода common() B(Callme targ){ super("Поток B"); target=targ; start(); } public void run(){ synchronized(target){ try{ count=target.common(); System.out.println("Поток B забрал значение ["+count+"]"); for(int j=1;j<=count;j++){ System.out.println("Поток В"); } target.notify();// Пробудить другой поток target.wait();//Перейти в спящий режим самому } catch(InterruptedException e){} } } } public class Beliaev_5variant_3_lab { public static void main(String[] args) { Callme target=new Callme(); for(int i=1;i<=5;i++){ new A(target); new B(target); } } }
Ps Is it possible that this is due to the fact that target.notify () and target.wait () blocks and awakens itself and things don't go on?