Thread.sleep () está travado?
qui está o meu código simples para fazer um loop a cada segundo (não precisa ser exato) e iniciar um trabalho, se necessári
while (true) {
// check db for new jobs and
// kick off thread if necessary
try {
Thread.sleep(1000);
} catch(Throwable t) {
LOG.error("", t);
}
}
Este código funcionou bem por vários meses. Ontem, começamos a ter problemas em que um de nossos servidores parece estar travado no método Thread.sleep (1000). IOW - já faz mais de um dia e o Thread.sleep não retornou. Iniciei o jconsole e recebo essas informações sobre o threa
Name: Thread-3
State: TIMED_WAITING
Total blocked: 2 Total waited: 2,820
Stack trace:
java.lang.Thread.sleep(Native Method)
xc.mst.scheduling.Scheduler.run(Scheduler.java:400)
java.lang.Thread.run(Thread.java:662)
Scheduler.java: 400 é a linha Thread.sleep acima. A saída do jconsole não incrementa "Total esperado" a cada segundo, como eu esperaria. De fato, não muda nada. Eu até desliguei o jconsole e o iniciei de novo, na esperança de que isso pudesse forçar uma atualização, mas só consegui os mesmos números novamente. Não sei que outra explicação poderia haver além do fato de a jvm ter pendurado incorretamente o comando sleep. Nos meus anos, porém, tive tão poucos problemas com a jvm que suponho que deve ser uma supervisão da minha part
ota: A outra coisa a observar é que nenhum outro segmento está ativ IOW - a CPU está quase ociosa. Li em algum lugar que o Thread.sleep poderia estar legitimamente faminto se outro segmento estivesse ativo, mas esse não é o caso aqu
ersão @solaris:
$ uname -a
SunOS xcmst 5.10 Generic_141415-08 i86pc i386 i86pc
ersão @java:
$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)