Claro que si puede utilizar el metodo wait, lo que pasa es que este metodo se puede usar solo en metodos que esten sincronizados (synchronized), un metodo sincronizado es aquel metodo que permite que un solo proceso a la ves aga uso de él... ejemplo: suponiendo que no existe el spool(virtualización de dispocitivos perifericos) para la impresora y debemos cuidar que un solo proceso imprima a la ves, ya que seria muy maluco(orrible, antiestetico, etc...) que dos procesos impriman al mismo tiempo, por aquello de que muy dificilmente se entendería el documento de impresion... el ejemplo(un ejemplo sencillo por supuesto) seria el siguiente:
class Imprimir{
private boolean semBinario;
public Imprimir(){
semBinario = true;
}
//este metodo p() permite que un solo proceso haga uso del recurso imprimir
//un solo proceso trabaja en imprimir, mientras los otros duermen
public synchronized void p(){
if(!semBinario)
try{
wait(); Dormir proceso
}catch(InterruptedException e){}
semBinario = false;
}
// este metodo v() desprieta un proceso para que haga uso de la impresora
public synchronized void v(){
semBinario = true;
notify();//Desprierta un proceso para que pueda imprimir }
public void imprimirAlgo(String nomProceso){
p();
int i = 10;
while(--i > 0){
System.out.println("Imprimiendo ejemplo del proceso " + nomProceso);
try{
Thread.sleep(100);
}catch(InterruptedException e){}
}
v();
}
}
public class ProcesoImprimir extends Thread{
private Imprimir impresora;
private String nombre;
public ProcesoImprimir(Imprimir impresora, String nombre){
this.impresora = impresora;
this.nombre = nombre;
}
public void run(){
impresora.imprimirAlgo(nombre);
}
public static void main(String[] args){
Imprimir imp = new Imprimir();
ProcesoImprimir p1 = new ProcesoImprimir(imp,"p1");
ProcesoImprimir p2 = new ProcesoImprimir(imp,"p2");
ProcesoImprimir p3 = new ProcesoImprimir(imp,"p3");
ProcesoImprimir p4 = new ProcesoImprimir(imp,"p4");
ProcesoImprimir p5 = new ProcesoImprimir(imp,"p5");
ProcesoImprimir p6 = new ProcesoImprimir(imp,"p6");
ProcesoImprimir p7 = new ProcesoImprimir(imp,"p7");
ProcesoImprimir p8 = new ProcesoImprimir(imp,"p8");
// se lanzan todos los procesos ligeros o hilos para que compitan por la
//impresora
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
p6.start();
p7.start();
p8.start();
}
}
Espero y este ejemplo le sea de utilidad
Pdt: el metodo wait no es de la clase Thread, este metodo pertenece a la clase Object, pero como Thread hereda de Object y todas las clases heredan de Object... ya me entiendes sierto que si...
Atte Antony Hernan Delgado Solano