| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/06/2007 23:31:41
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Frank Sommers iniciou uma discussão interessante no Artima, o quanto de concorrência as biblioteas visuais que nós utilizamos disponibilizam e o quanto isso é necessário?
Quem já trabalhou com Swing sabe que você só pode alterar o estado de um componente de dentro da thread do próprio Swing (usando as classes SwingUtilities ou EventQueue) pra registrar os "runnables" que vão executar o trabalho. Fazer uma alteração em um componente Swing de fora dessas threads vai ser trabalho perdido. O SWT, a biblioteca de componentes do Eclipse, é ainda mais dura, a invocação de qualquer método em um componente visual de fora da thread de desenho faz com que o método lançe uma exeção e o programa pare automaticamente se ninguém tratá-la.
A decisão de ter uma thread única para execução de eventos foi uma necessidade na construção dessas duas bibliotecas, mas hoje com as aplicações AJAX e os clientes ricos executando em um modo "thread única" alguns conceitos estão mundando, mas um modelo de thread única pode fazer a aplicação congelar enquanto espera a resposta da ação.
Mas então, você acha os modos de trabalho do Swing/SWT trabalhosos demais? APIs mais simples como o Flex resolvem o problema melhor? E os trabalhos longos, o que fazer com eles?
Discussão: How Much Concurrency Should be Exposed in a UI Toolkit?
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/06/2007 08:47:02
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Tanto o Swing quanto o SWT tem esse modelo porque foram projetados para serem extendidos.
É extremamente complicado, sujeito a erros e frustrante tentar extender um modelo visual thread-safe, ou que tem muitas preocupações com concorrência. Se você não souber exatamente o que está fazendo, certamente recairá em deadlocks ou a códigos com comportamento inesperado e muito difícil de depurar.
O fato é que, o modelo single-threaded é muito fácil de ser compreendido e extendido, mesmo por programadores pouco experientes. Abrir mão desse modelo seria também abrir mão de parte do poder de extensão que o Swing tem.
Não estou negando que falta para o Swing mais suporte para isso. Realmente alguns frameworks terceiros facilitam muito a tarefa de manter esse modelo, ou mesmo automatizam atividades recorrentes (tal como o desenho de barras de progresso, por exemplo). O a própria versão release candidate do Netbeans exemplifica isso com maestria, quando nos apresenta um modelo task-oriented extremamente simples de se usar.
A grande dúvida é... precisamos realmente extender o framework gráfico? Ou é papel desse framework nos fornecer classes boas o suficiente para que não nos preocupemos com isso (filosofia por sinal da VCL e do VB)?
Eu, particularmente, acho que a decisão sobre como o Swing é estruturado foi acertada. Só falta agora, polir um pouco o framework, aparar algumas arestar e tornar a programação dele mais agradável.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/06/2007 16:24:16
|
andreban
JavaTeenager
Membro desde: 11/07/2006 10:41:57
Mensagens: 188
Localização: Rio de Janeiro
Offline
|
Um artigo falando sobre o assunto...
http://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html
|
--== http://www.codemansion.com/ ==-- Blog de Desenvolvimento Android e Games
-== http://mobplug.com/ ==-- Simple products, powerful solutions!
SCJA | SJCP | SCJD | SCWCD |
|
|
 |
|
|
|
|