
08/07/2005, 20:07
|
 | | | Fecha de Ingreso: junio-2005
Mensajes: 620
Antigüedad: 19 años, 7 meses Puntos: 1 | |
para trabajar con hilos en java tienes dos opciones la mas sencilla es hacer que tu clase extienda de Thread y hacer un metodo run el cual va a llevar el codigo que deseas,tambien es necesario los metodos, wait y notify, pero te sere sincero se me hace raro que te pidan multiplicar matrices con hilos, especificamente que fue lo que te pidieron, puede que tenga un ejemplo o algo util entre tanto codigo y tarugadas que me pidieron en la escuela.
este es un programa muy sencillo que husa hilo espero te de una idea:
/*Asumimos que tenemos tres procesos: Pa, Pb, Pc. Sólo el proceso Pa
puede escribir la letra A, Pb la letra B y Pc la letra C. Utilizando
solamente semáforos (y no otras variables) los procesos deben
sincronizarse, satisfaciendo las siguientes condiciones:
a) A y B pueden escribirse antes de que se escriba C.
b) B y C pueden alternarse en una cadena de salida, esto quiere
decir, que después de que salga la primera B no puede salir cualquier
B hasta que haya salido una C. Similarmente después de la salida de
una C no puede salir otra C hasta que haya salido una B.
c) El número total de B y C que puede aparecer en una salida no
puede exceder al número total de A.*/
import java.io.*;
import java.lang.*;
import java.math.*;
class imprimeABC{
public static void main(String args[]){
pantalla p=new pantalla();
Pa ProcA=new Pa(p);
Pb ProcB=new Pb(p);
Pc ProcC=new Pc(p);
ProcA.start();
ProcB.start();
ProcC.start();
}
}
class pantalla{
int B=1; int C=2; int sem=B;
public synchronized void imprime_A(){
System.out.print(" A ");
}
public synchronized void imprime_B(){
while(sem!=B){
try{wait();}
catch(InterruptedException e) {
System.out.println("Error: "+e.toString());
}
}
System.out.print(" B ");
sem=C;
notify();
}
public synchronized void imprime_C(){
while(sem!=C){
try{wait();}
catch(InterruptedException e) {
System.out.println("Error: "+e.toString());
}
}
System.out.print(" C ");
sem=B;
notify();
}
}
class Pa extends Thread{
pantalla pant;
Pa(pantalla p){ this.pant=p;}
public void run(){
for(int i=0; i<10; i++){
pant.imprime_A();
try{sleep((int)(Math.random()*3000));}
catch(InterruptedException e) {
System.out.println("Error: "+e.toString());
}
}
}
}
class Pb extends Thread{
pantalla pant;
Pb(pantalla p){this.pant=p;}
public void run(){
for(int i=0; i<5;i++){
pant.imprime_B();
try{sleep((int)(Math.random()*3000));}
catch(InterruptedException e) {
System.out.println("Error: "+e.toString());
}
}
}
}
class Pc extends Thread{
pantalla pant;
Pc(pantalla p){this.pant=p;}
public void run(){
for(int i=0; i<5; i++){
pant.imprime_C();
try{sleep((int)(Math.random()*3000));}
catch(InterruptedException e) {
System.out.println("Error: "+e.toString());
}
}
}
} |