Metodos Estaticos

11 respostas
aborges

Boa tarde galera!

Estou desenvolvendo uma aplicacao para intranet de uma empresa, q sera acessada por umas 150 pessoas mais ou menos.

Tenho habito de criar metodos estaticos para resolver problemas genericos tipo:

Utis.formataData(); Utils.verificaPermissao(usuario); Utils.blablabal;

Minha dúvida é:

Se eu possuir uma funcao um pouco mais pesada ( q demore 0,5 segundos por exemplo ) e ela for acessada simultaneamente por 50 usuarios (chute ), ele ira gerar uma espera de 25 segundos para o ultimo por ser estatica ou nao…

Valews

11 Respostas

smota

static != syncronized

A “espera” só ocorre se seu método for sincronizado, se não for o que pode ocorrer é uma bagunça por causa da concorrência …

Lembrando que EJBs não são amigos do static :wink: , use com cuidado :smiley:

aborges

Eu nao estou usando eles em um EJB…

Outra coisa…

Como ele geraria confusão? Tipo… Ao comecar a executar um metodo ele pode interromper a execucao e comecar de novo pra outro solicitacao e assim por diante e no fim misturar os valores todos?

Valew…

jgbt

aborges:
Eu nao estou usando eles em um EJB…

Outra coisa…

Como ele geraria confusão? Tipo… Ao comecar a executar um metodo ele pode interromper a execucao e comecar de novo pra outro solicitacao e assim por diante e no fim misturar os valores todos?

Valew…


o problema de não ser sincronisado é referente a mudança de valores dentro do metodo, pois varias threads vão acessa-lo ao mesmo tempo.

[]'s

Rafael_Steil

As variaveis de escopo do metodo nao sao afetadas pela concorrencia, somente as de classe, se houver alguma.

Ou seja, vc nao tera problemas de concorrencia se tudo oque vc usar for inerente ao metodo, e podera ter problemas se houver algum membro da classe que eh gravado pelos metodos estaticos fora de blocos sincronizados. Se for somente leitira nao ha problema algum.

Rafael

cv1

Lembrando tambem que metodos estaticos, quando eh pra dar uma maozinha em tarefas pequenas que de outra forma estariam duplicada pra todo lado, sao extremamente beneficos quando usados sem forcar a barra.

A coisa horrivel eh ter variaveis estaticas. As implementacoes usuais de Singletons, Factories e outros patterns levam a codigo porco justamente por esse e outros motivos :wink:

kuchma

Ah, nem pra criar constantes? :mrgreen:

Marcio Kuchma

fzampa

jgbt:
aborges:
Eu nao estou usando eles em um EJB…

Outra coisa…

Como ele geraria confusão? Tipo… Ao comecar a executar um metodo ele pode interromper a execucao e comecar de novo pra outro solicitacao e assim por diante e no fim misturar os valores todos?

Valew…


o problema de não ser sincronisado é referente a mudança de valores dentro do metodo, pois varias threads vão acessa-lo ao mesmo tempo.

[]'s

Deixa eu ver se eu entendi…

Se eu utilizando o sistema acesso MeuObjeto.marcaX(int x);
e vc utilizando também acessa o mesmo método ambos compartilham a mesma thread? Se houver alteração de conteúdo altera para os dois?

Eu achei que cada um era uma “instância”*.

*Essa foi a melhor palavra que eu encontrei.

Ou o MeuObjeto compartilha seu métodos e atributos Static para todos os seus acessos?

Rafael_Steil

Entao, essa eh a diferenca “basica” entre metodos de instancia e metodos de classe. Qdo vc tem algo static, ele eh um soh para todas as instancias que por ventura venham a existir. Logo, se vc altera algum membro estatico, todas as instancias irao ver a mudanca.

E, mais uma vez, o que vc cria dentro do metodo eh referente unicamente àquela chamada do metodo, independente de ser static ou nao.

Rafael

fzampa

Ah, isso me lembra uma leitura que fiz (não lembro qual) que dizia que elementos estáticos servem como uma “configuração” para todos os usuários do sistema.

Agora entendo essa frase melhor… :wink:

aborges

Obrigado a todos pelas respostas!

Acho q nao terei problemas no meu sistema entao! :smiley:

Valews!

cv1

Ah, nem pra criar constantes? :mrgreen:

Nao, pq elas sao final :wink:

Criado 4 de janeiro de 2005
Ultima resposta 5 de jan. de 2005
Respostas 11
Participantes 7