Pessoal, nao sei se isso eh avancado propriamente - talvez eu esteja com a solucao na frente do nariz e nao esteja vendo. :D
Seguinte - imagine que eu tenha um processo que pode ter apenas uma unica thread por vez rodando num determinado processo critico. Mas eu nao quero que as outras threads fiquem esperando - quero que simplesmente encerrem (se eu simplesmente sincronizasse o processo critico e ele demorasse muito, depois eu teria trocentas threads tentando pegar o lock).
Isto posto, pensei no seguinte (obvio):
- tenta pegar um lock.
- nao conseguiu, return.
- caso chegue ate aqui, rodar processo critico.
Porem como saber que a thread nao conseguiu o lock? Ela simplesmente bloqueia, certo?
Entao fiz de outra forma - controlando isso no proprio lock. Ficou meio estranho, entao queria a opiniao de voces se eh isso mesmo, se tem outra forma, se estou viajando, etc.
private static Boolean lock = new Boolean(false);
public void execute() {
synchronized (lock) {
if (lock.booleanValue()) {
return; // existe outra instancia rodando no processo critico
}
lock = new Boolean(true);
}
// processo critico
synchronized (lock) {
lock = new Boolean(false);
}
}
O ideal seria algo como (getLock() || return)... :D
Marcio Kuchma
