eu estou fazendo uma aplicação que simula o funcionamento de um SO, que mostra alguns processos em uma tabela como se fosse um gerenciador de processos, soh q soh um processo funciona por vez…processos são criados…processos terminam…
o problema eh que esta ocorrendo um problema de sincronização, tem hora que algum processo eh terminado
depois que se pega o numero de linhas da tabela, e se por acaso o processo a ser rodado é o ultimo o programa trava…
o codigo esta abaixo do escalonador, e do thread q controla a vida dos processos…
a variavel inteira "sinc"eu tentei utilizar para sincronizar essas threads mas não deu certo…
public class escalonador extends Thread
{
Processo[] processo;
JTable tab;
int sinc;
public escalonador(Processo[] p,JTable t,int s)
{
processo=p;
tab=t;
sinc=s;
this.start();
}
public void run()
{
int a,aux,atual=0;
Random r=new Random();
while(true)
{
while(sinc!=0);
sinc++;
a=((DefaultTableModel)tab.getModel()).getRowCount();
if(a!=0)
{
aux=r.nextInt(a);
processo[atual].thread.suspend();
((DefaultTableModel)tab.getModel()).setValueAt("em espera",atual,3);
((DefaultTableModel)tab.getModel()).setValueAt("em execução",aux,3);
processo[aux].thread.resume();
atual=aux;
sinc=0;
try
{
this.sleep(4000);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
sinc=0;
}
}
}
public class controla extends Thread{
Processo a;
Principal p=new Principal();
int sinc;
public controla(Processo q,int s) {
a=q;
sinc=s;
this.start();
}
public void run() {
Random r=new Random();
int cont=10;
while(cont>0)
{ cont--;
try {
this.sleep(10000+r.nextInt(10000));
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
while(sinc!=0);
sinc++;
p.remove(a.nome,p.tab.tabela);
sinc=0;
a.thread.suspend();
a.frame.setVisible(false);
}
}
pessoal me desculpem mas eu naum sei colocar codigo como vcs fazem…
se alguem puder me ajudar a resolver esse problema…