Code:
import java.io.*;
class T extends Thread{
public static int q;
public static boolean i=false;
T(){}
public synchronized void kreni() {
try {
while(i!=true) wait();
}
catch(Exception e){System.out.println("G 1");}
System.out.println("Sve OK!");
}
public synchronized void promeniUslov(){
try {while(System.in.read()!=65) {}} catch (Exception e){System.out.println("G 2");}
i=true;
System.out.println(3);
notifyAll();
System.out.println(4);
}
public void run(){
if (q==0){
System.out.println(1);
q=1;
kreni();}
else {System.out.println(2); promeniUslov();}
}
}
public class Pokusaj2 {
/** Creates a new instance of Pokusaj2 */
public Pokusaj2() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
T t1=new T();
t1.start();
T t2=new T();
t2.start();
// TODO code application logic here
}
}
import java.io.*;
class T extends Thread{
public static int q;
public static boolean i=false;
T(){}
public synchronized void kreni() {
try {
while(i!=true) wait();
}
catch(Exception e){System.out.println("G 1");}
System.out.println("Sve OK!");
}
public synchronized void promeniUslov(){
try {while(System.in.read()!=65) {}} catch (Exception e){System.out.println("G 2");}
i=true;
System.out.println(3);
notifyAll();
System.out.println(4);
}
public void run(){
if (q==0){
System.out.println(1);
q=1;
kreni();}
else {System.out.println(2); promeniUslov();}
}
}
public class Pokusaj2 {
/** Creates a new instance of Pokusaj2 */
public Pokusaj2() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
T t1=new T();
t1.start();
T t2=new T();
t2.start();
// TODO code application logic here
}
}
interesuje me zasto ovaj kod ne radi.
Odnosno, zasto se ne zavrsi izvrsavanje.
izlaz je ovakav:----
1
2
(ovde ja ukucavam): a s r A
3
4
-------
i sada ovde blokira.
zar nije ispunjen uslov da se prva nit odblokira? i=true;
Kod nicemu ne sluzi, nego sam ja samo probao da vidim kako stvari funkcionisu.
Interesuje me i to, da li
notifyAll() deluje samo na niti koje su istog tipa kao objekat koji je pozvao ovu metodu ili ne?
Ako je odgovor DA, kako se vrsi komunikacija izmedju niti razlicitog tipa?
Mislim, jedna nit je blokirana sa wait() i ceka uslov koji bi trebalo da joj postavi neka druga nit
potpuno drugog tipa. Da li ja uopste dobro razmisljam po ovom pitanju?
hvala.
--------------------
mightymv
mightymv