Funcionamento interno do modificador static na VM

2 respostas
ccaneta

Pessoal,

Gostaria de saber como a VM se comporta qdo 2 Threads acessam um mesmo metodo static de algum objeto? Se este metodo static e enfileirado ou duplicado para melhorar a perfomance no acesso.
Sei que as variaveis internas do metodo são thread-safe e os seus dados ficariam seguros ate então, mas qdo e acessado um item compartilhado como um atributo membro teriamos um problema de segurança nos dados que exigiria o uso do synchonized.

Portanto assim como ficaria na memoria o static??

2 Respostas

T

ccaneta:
Pessoal,

Gostaria de saber como a VM se comporta qdo 2 Threads acessam um mesmo metodo static de algum objeto? Se este metodo static e enfileirado ou duplicado para melhorar a perfomance no acesso.
Sei que as variaveis internas do metodo são thread-safe e os seus dados ficariam seguros ate então, mas qdo e acessado um item compartilhado como um atributo membro teriamos um problema de segurança nos dados que exigiria o uso do synchonized.

Portanto assim como ficaria na memoria o static??

Valeu!
Carlos

as regras para static sao as mesmas para nao static…
imagine o static como um metodo da instancia do objeto Class que a possui…

BLACKHAT

Olá Carlos
Blackhat para vc…ai vai minha observação.

Uma Theard é uma parte ativa de um processo do sistema operacional, com o objetivo de realizar alguma tarefa.Java suporta um mecanismo multithreaded, ou seja, várias threads executando concorrentemente.
A linguagem faz este suporte através:
da classe java.lang.Thread
da interface java.lang.Runnable
dos métodos wait(), notifify e noifiyAll() da classe java.lang.Object
da palavra chave synchronized.
Durante a execução de um thread, são levados em consideração inumeros fatores para determinar seu tempo de execução, como, por exemplo,o tempo durante o qual ele vai utilizar o processador.A JVM não pode permitir que um thread fique sendo executado durante todo o tempo de que precisa para executar a sua tarefa, pois isso pode fazer com que outros threads tenham de esperar muito tempo pela sua vez de usar o processador.Com isso, o usuriario precisaria esperar uma eternidade para realizar sua tarefa.
Se vc como programador quizer, pode interferir na organização de execução dos threads.Isso pode ser feito utilizando algum método para “indicar” à JVM que suspenda determinada linha de execução, ou então configurando prioridades para a e execução dos threads, de modo que a JVM dê preferencia para um thread ou outro.
É possivel, ainda, impedir que determinada parte de um codigo seja executada por dois threads ao mesmo tempo, caso isso seja necessário ao bom andamento do sistema.Para exemplificar essa situação, imagine um processo entre saque e deposito em uma conta corrente, no qual queremos garantir que o saque só ocorra depois de o deposito já ter sido concluido.
Ao Método static
Um método estático tem o mesmo objetivo de um atributo estático, podendo ser chamado sem necessidade de criação de um objeto.São denominados de métodos de classe ao invés de métodos de instância.
Bloco de codigo static
Um bloco de codigo estatico é executado somente, uma vez e imediamente após a primeira referencia à classe, isto é, no carremento da mesma.
Como o bloco de codigo estático é executado no carremento da classe, consequentemente será executado antes da chamada ao construtor da classe.
Dentro de um bloco de codigo estático podemos acessar somente atributos e métodos estáticos.
Blocos de codigo estáticos não podem lançar exceções, visto que isto já torna desvantagem ao que priva segurança na manipulação de threads que queriam fazer a chamada da mesma.

ccaneta:
Pessoal,

Gostaria de saber como a VM se comporta qdo 2 Threads acessam um mesmo metodo static de algum objeto? Se este metodo static e enfileirado ou duplicado para melhorar a perfomance no acesso.
Sei que as variaveis internas do metodo são thread-safe e os seus dados ficariam seguros ate então, mas qdo e acessado um item compartilhado como um atributo membro teriamos um problema de segurança nos dados que exigiria o uso do synchonized.

Portanto assim como ficaria na memoria o static??

Valeu!
Carlos

Criado 26 de março de 2006
Ultima resposta 27 de mar. de 2006
Respostas 2
Participantes 3