metodo synchronized duvida - Threads[resolvido]  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

ae pessoal estudando threads.. e vendo o modificador synchronized me bateu essa duvida, a qual eu tinha certeza que o codigo ia ser impresso era: JJ0 JJ 1 JJ 2. ou GG 0 GG 1 GG2. nao eh garantido qual seria primeiro mais a impressao seria dessa forma.. ou um ou outro. porem nao foi.. o q houve?
Porem o resultado nao foi assim pq? se na teoria synchronized diz que uma unica thread so pode executar um bloco ou metodo synchronized.


porem esse codigo me deixou plenamente confuso.. e sem entender..
Segundo a kathy o metodo sleep() ele nao libera o bloqueio de um metodo ou bloco sincronizado mais parece isso nao aconteceu ai.. dar ideia que o bloqueio foi liberado.. :S

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
lenando
Debugger
[Avatar]

Membro desde: 12/05/2006 01:09:44
Mensagens: 72
Localização: Blumenau/SC Brasil
Offline

não há garantia pois há 2 instâncias da class bloq !!!



Acredito q seja isso.
Espero ter ajudado.

Att.
Fernando.

"Não existe ninguém tão sábio que não tenha nada para aprender e ninguém tão ignorante que não tenha nada para ensinar"
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

mas pq se eu colocar o metodo que ta synchronized para static ele imprime certinho:
JJ 0
JJ 1
JJ 2
ou
GG 0
GG 1
GG 2

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
lenando
Debugger
[Avatar]

Membro desde: 12/05/2006 01:09:44
Mensagens: 72
Localização: Blumenau/SC Brasil
Offline

pq com o static vc vai estar fazendo lock na classe e não mais no objeto.

Dá uma olhada no livro da Kaith que tem uma parte falando sobre lock na classe e lock no objeto ... eu achei muito interessante a explicação e os exemplos do livro.

Tem um explanação no livro sobre o acesso a atributos estáticos sendo acessados por métodos não estáticos ...

Att.
Fernando.

"Não existe ninguém tão sábio que não tenha nada para aprender e ninguém tão ignorante que não tenha nada para ensinar"
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

po. eu li..mais ainda ta confuso de abstrair.. pq achei que somente uma thread ia executar esse metodo.. sendo ele nao static.. mais pelo visto nao...
eita q ta confuso :S

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Camilo, se você tem 2 objetos, você terá um bloco sincronizado para cada objeto. Em cada objeto, haverá uma cópia de variáveis locais, uma cópia de toda a estrutura. Portanto, cada thread terá liberdade de percorrer esse bloco da maneira que lhe convier.

A sincronização só faz sentido quando duas threads diferentes tentam acessar O MESMO objeto. Por exemplo, no código abaixo as duas threads bloq compartilham um único objeto, chamado bloqPrinter. Esse objeto, que vai ser acessado por duas threads ao mesmo tempo, tem um método sincronizado:



[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Acho que também não custa você reler essa nossa discussão sobre o mesmo assunto.
[WWW]
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

po entao saquei.. no meu codigo tenho destino diferentes para minhas duas threads? posso dizer assim? por isso que o metodo eh acessando pelas threads ao mesmo tempo e afetando o resultado? enfim nao tenho um metodo synchronized o qual nao faz diferença ja q minhas threads nao tem o mesmo trabalho a ser executado certo?

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
neohacker
Virtual Machine Man
[Avatar]

Membro desde: 30/10/2006 15:23:14
Mensagens: 576
Localização: Santo André
Offline

é isso ai kra
vc possui uma Thread pra cada objeto, como não há acesso simultaneo aos objetos tanto faz se eh synchronized ou não, por isso o resultado está intercalado.
agora te deixo uma pergunta o resultado será sempre o mesmo??

hehe

http//www.tecnologiaims.blogspot.com

↑ Grab this Headline Animator

http://www.imstechnology.blogspot.com
[Email] [WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

É mais ou menos por aí...

Dois objetos diferentes, dois blocos de código sincronizado (um para cada objeto). Cada thread pode percorrer um bloco sincronizado por vez.
Com 2 blocos e 1 thread em cada bloco, duas threads rodam juntas.

Um único objeto terá um bloco de sincronização. Cada thread pode percorrer um bloco sincronizado por vez. Com 1 blocos e 2 threads, uma terá que rodar de cada vez...
[WWW]
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

opa saquei! valeu galera.. dei uma lida novamente e vi que a kathy fala sobre isso.. em outras palavras hehe..
neohacker a resposta é: não, nada é garantido

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team