Fechamento inoperante Tópico Verifique

votos
3

Alguém pode me dizer como posso saber quantos segmentos estão em condição de impasse em uma aplicação multi-threading Java? Qual é a maneira de descobrir a lista de tópicos impasse?

Eu ouvi sobre despejo de thread e rastreamentos de pilha, mas eu não sei como implementá-lo.

  • Eu também quero saber o que os novos recursos foram introduzidos no Java 5 para rosqueamento?

Por favor me avise com os seus comentários e sugestões.

Publicado 19/05/2009 em 18:00
fonte usuário
Em outras línguas...                            


4 respostas

votos
7

Forma de obtenção de depósitos de rosca:

  • ctrl-break (Windows) ou \ Ctrl-, possivelmente, ctrl-4 e kill -3no Linux / UNIX
  • jstacke seu ID do processo (uso jps)
  • jconsole ou visualvm
  • praticamente qualquer depurador

Principais novos recursos de threading em J2SE 5.0 (lançado em 2004 no fim do serviço Período de Vida):

  • java.util.concurrent
  • Novo Modelo de memória Java.
Respondeu 19/05/2009 em 18:16
fonte usuário

votos
2

usar mortes -3 na identificação do processo

este irá imprimir para o console um dump fio e uma visão geral de contenção de rosca

Respondeu 19/05/2009 em 18:04
fonte usuário

votos
1

De dentro de seu programa, o ThreadMXBean classe tem um método findMonitorDeadlockedThreads () , bem como métodos para consultar os rastreamentos de pilha atual de threads. A partir do console no Windows, fazendo Ctrl + Break dá-lhe uma lista de rastreamentos de pilha e indica tópicos deadlocked.

Bem como alguns ajustes para o modelo de memória Java que arrumar algumas simultaneidade "brechas", a característica mais significativa underlyingly em Java 5 é que ele expõe Compare-and-Set operações (CAS) para o programador. Em seguida, no verso desta, toda uma série de utilitários de simultaneidade são fornecidos na plataforma. Não há realmente toda uma série de coisas, mas eles incluem:

  • coleções simultâneas
  • executores, que efetivamente permitem que você implementar coisas como pools de threads
  • outras construções comum simultaneidade (filas, trincos, as barreiras)
  • variáveis ​​atômicas

Você pode estar interessado em alguns tutoriais que eu escrevi sobre muitas das características de simultaneidade Java 5 .

Respondeu 19/05/2009 em 20:53
fonte usuário

votos
0

Se você quiser saber mais sobre os novos recursos simultâneos em Java 5, você poderia fazer muito pior do que ficar uma cópia do Java Concurrency in Practice por Brian Goetz (Brian Goetz e um número dos co-autores destinados as bibliotecas Java 5 de simultaneidade). É ao mesmo tempo altamente legível e autoritária, e combinando exemplos práticos e teoria.

O resumo executivo dos novos utilitários concorrentes é a seguinte:

  • Agendamento de tarefas Framework - O quadro Executor é uma estrutura para padronizar invocação, programação, execução e controle das tarefas assíncronas de acordo com um conjunto de políticas de execução. Implementações são fornecidas para permitir que as tarefas a serem executadas dentro do segmento submeter, em um único segmento de segundo plano (como com eventos em Swing), em um segmento recém-criado, ou em um pool de threads, e os desenvolvedores podem criar de Executor apoiar as políticas execução arbitrária. As implementações embutidos oferecer políticas configuráveis, tais como limites de comprimento de fila e a política de saturação, que pode melhorar a estabilidade de aplicações, impedindo que o consumo de recursos fugitivo.
  • Simultâneos Colecções - Várias novas classes coleções foram adicionados, incluindo a nova fila e interfaces de BlockingQueue e de alta performance, implementações simultâneas do Mapa, Lista e Queue.
  • Variáveis ​​atómicas - Classes para variáveis ​​individuais atomicamente manipulao (tipos primitivos ou referências), proporcionando-alto desempenho aritmética atómica e métodos comparar-e-estabelecido. As implementações variáveis ​​atômicas em oferta java.util.concurrent.atomic maior desempenho do que estaria disponível usando a sincronização (na maioria das plataformas), tornando-os úteis para a implementação de alto desempenho algoritmos simultâneos, bem como convenientemente implementação de contadores e geradores de números seqüência.
  • Sincronizadores - classes de sincronização de uso geral, incluindo semáforos, exclusões mútuas, barreiras, travas e trocadores, que facilitam a coordenação entre os tópicos.
  • Fechaduras - Embora o bloqueio é construído dentro da linguagem Java através da palavra-chave sincronizado, há uma série de limitações inconvenientes para embutido fechaduras monitor. O pacote java.util.concurrent.locks fornece uma implementação de bloqueio de alto desempenho com a mesma semântica de memória como sincronização, mas que também suporta a especificação de um tempo limite ao tentar adquirir um bloqueio, múltiplas variáveis ​​de condição por trave, fechamentos não escopo léxico, e suporte para interromper tópicos que estão esperando para adquirir um bloqueio.
  • Nanossegundo-granularidade temporização - O método System.nanoTime permite o acesso a uma fonte de tempo nanossegundo-granularidade para fazer medidas de tempo relativo, e métodos que aceitam tempos de espera (como o BlockingQueue.offer, BlockingQueue.poll, Lock.tryLock, Condition.await, e Thread.sleep) pode assumir valores de tempo limite em nanossegundos. A precisão real de System.nanoTime é dependente de plataforma.
Respondeu 22/05/2009 em 03:08
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more