Pessoal estou implementado uma classe mae para algumas Threads que implementam servicos no meu sistema… Esses servicos podem ser iniciados, interrompidos e finalizados… Utilizo o conceito de singleton para iniciar meus servicos, garantindo que uma unica instancia desse servico esta rodando… Nao tenho muita experiencia com Threads e queria uma opiniao de vcs… Ai vai o codigo…
O metodo abstrato executar seria a implementacao do servico.
[ ]s,
Gustavo.
public abstract class ThreadServico extends Thread {
private static final int EXECUTAR = 1;
private static final int SUSPENDER = 2;
private static final int FINALIZAR = 3;
private static int estado = 1;
private static int intervalo = 1 * 1000;
public void run() {
synchronized(this) {
while (this.getEstado() != ThreadServico.FINALIZAR) {
try {
Thread.sleep(ThreadServico.intervalo);
while (this.getEstado() == ThreadServico.SUSPENDER) {
wait();
}
this.executar();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}
protected abstract void executar();
public synchronized void executarServico() {
this.setEstado(ThreadServico.EXECUTAR);
}
public synchronized void suspenderServico() {
this.setEstado(ThreadServico.SUSPENDER);
}
public synchronized void finalizarServico() {
this.setEstado(ThreadServico.FINALIZAR);
}
private synchronized int getEstado() {
return ThreadServico.estado;
}
private synchronized void setEstado(int estado) {
ThreadServico.estado = estado;
notify();
}
}