Hi, I attached my Cliente.java I have 2 threads: Receptor and Transmisor. Receptor sends and receives data from server, using method recibirPeticion(), forever (well, it sleeps 3 seconds). When Transmisor sends data, using method enviarPeticion(), Receptor must wait until Transmisor ends his transmition. I get java.lang.IllegalMonitorStateException: current thread not owner What's wrong? Thanks! Carlos
import java.io.BufferedReader; import java.io.PrintWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class Cliente implements Runnable { static String respuesta="0"; static Socket socket=null; static PrintWriter out=null; static BufferedReader in=null; static Thread receptor; static Thread transmisor; static String host=null; static boolean indicador=false; public static void main(String args[]) { new Cliente(); } public Cliente() { if(true) { try { host="132.248.59.4"; socket=new Socket(InetAddress.getByName(host),4444); System.out.println("Creando hilo Receptor"); receptor=new Thread(this,"Receptor"); System.out.println("Creando hilo Transmisor"); transmisor=new Thread(this,"Transmisor"); receptor.start(); transmisor.start(); } catch(UnknownHostException e) { System.err.println("Host desconocido: "+host); System.exit(1); } catch(IOException e) { System.err.println("Error de Entrada/Salida con: "+host); System.exit(1); } } } public void run() { while(true) { if(Thread.currentThread().getName().equals("Receptor")) recibirPeticion(); else if(Thread.currentThread().getName().equals("Transmisor")) enviarPeticion(); } } public synchronized static void recibirPeticion() { System.out.println("Iniciando Receptor"); try { while(indicador==true) { System.out.println("Deteniendo hilo Receptor"); Thread.currentThread().wait(); System.out.println("Continuando hilo Receptor"); } System.out.println("Receptor recibe estado de la sala"); out=new PrintWriter(socket.getOutputStream(),true); out.println("recibir"); in=new BufferedReader(new InputStreamReader(socket.getInputStream())); respuesta=in.readLine(); System.out.println("La respuesta del Servidor es: "+respuesta); Thread.sleep(3000); } catch(Exception e) { System.out.println("Paso algo con el servidor: "+host); e.printStackTrace(); } } public synchronized static void enviarPeticion() { indicador=true; System.out.println("Iniciando Transmisor"); try { out=new PrintWriter(socket.getOutputStream(),true); System.out.println("El usuario carlos aparto una computadora"); out.println("enviar"); out.println("carlos"); out.println("15"); out.println("21:00"); out.println("50"); } catch(IOException e) { System.err.println("Error de Entrada/Salida con: "+host); e.printStackTrace(); } indicador=false; System.out.println("Notificando..."); Thread.currentThread().notifyAll(); } }