Syncronized[RESOLVIDO]

5 respostas
A

tenho o seguinte trecho de código:

while (System.currentTimeMillis() < endTime) {
          synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
          }
      }

Alguém pode mi dizer o que significa esse bloco de código synchronized? Grato.

5 Respostas

R

faz esperar um certo tempo(endTime), tipo uma pausa na execução.

ViniGodoy

Nesse caso seria melhor usar Thread.sleep no lugar de wait.

fabiocortolan

Além do q foi dito, o synchronized serve para travar o acesso simultâneo a esse trecho do código, ou seja, apenas um acesso é feito por vez a esse trecho, o próximo método que queira acessá-lo deverá aguardar que o último tenha concluído.
P/ quem quiser uma explicação melhor sobre o synchronized, segue artigo: http://www.guj.com.br/articles/43

douglaskd

uma outra explicação…é que

o bloco sincronized esta travado o bloco de código para apenas uma thread.

quando se usa sincronized(this) ou somente sincronized…significa que esta travando o bloco.

imagine 2 threads… uma produz e a outra consome…

quando a thread 1 entrar no bloco, ela vai chegar no wait() e ficar aguardar um tempo para que de tempo da outra thread ser a proxima …

sem sincronized seu código poderá rodar assim:

thread1 acessa bloco
thread1 acessa bloco
thread2 acessa bloco
thread1 acessa bloco
thread1 acessa bloco
thread2 acessa bloco
thread2 acessa bloco

de maneira aleatória…

com sincronized…seu código roda assim:

(inicio) thread1 acessa bloco (dorme)
(acorda) thread2 acessa bloco (dorme)
(acorda) thread1 acessa bloco (dorme)
(acorda) thread2 acessa bloco (dorme)
(acorda) thread1 acessa bloco (dorme)

de forma sequencial.

seu código não precisa de notifyAll() pelo fato do Wait( tempo ) ter um tempo para aguardar, em algumas vezes a thread entra em wait() até ser “acordada/notificada” por outra thread.

A

Valew pela ajuda, pessoal!

Criado 10 de maio de 2013
Ultima resposta 10 de mai. de 2013
Respostas 5
Participantes 5