terça-feira, setembro 13, 2005
NC Java Threads
Documente a segurança em relação a threads
O comportamento de uma classe quando seus métodos estão sujeitos a uso simultâneo é uma parte importante do contrato que ela estabelece com seus clientes.
Para permitir seu uso seguro de forma multitarefa, a classe deve documentar claramente o nível de segurança que ela suporta, de acordo com a lista a seguir:
- immutable: instâncias desta classe parecem constantes para os clientes. Não é necessária sincronização externa.
- thread-safe: as instâncias são mutáveis, mas todos os métodos possuem sincronização interna suficiente. Chamadas simultâneas parecerão ser executadas serialmente, em uma ordem consistente.
- conditionally thread-safe: similar a anterior, porém alguns métodos precisam ser chamados em seqüência e sem interferência de outras threads. O cliente precisa obter a trava apropriada durante a execução da seqüência.
- thread-compatible: instâncias dessa classe podem ser usadas seguramente de forma simultânea se cada chamada de método (ou seqüência) estiver dentro de uma região sincronizada.
- thread-hostile: o uso dessa classe por múltiplas threads não é seguro, mesmo que todos os métodos sejam sincronizados externamente. Normalmente isso ocorre quando os métodos modificam dados estáticos que afetam outras threads.
O comportamento de uma classe quando seus métodos estão sujeitos a uso simultâneo é uma parte importante do contrato que ela estabelece com seus clientes.
Para permitir seu uso seguro de forma multitarefa, a classe deve documentar claramente o nível de segurança que ela suporta, de acordo com a lista a seguir:
- immutable: instâncias desta classe parecem constantes para os clientes. Não é necessária sincronização externa.
- thread-safe: as instâncias são mutáveis, mas todos os métodos possuem sincronização interna suficiente. Chamadas simultâneas parecerão ser executadas serialmente, em uma ordem consistente.
- conditionally thread-safe: similar a anterior, porém alguns métodos precisam ser chamados em seqüência e sem interferência de outras threads. O cliente precisa obter a trava apropriada durante a execução da seqüência.
- thread-compatible: instâncias dessa classe podem ser usadas seguramente de forma simultânea se cada chamada de método (ou seqüência) estiver dentro de uma região sincronizada.
- thread-hostile: o uso dessa classe por múltiplas threads não é seguro, mesmo que todos os métodos sejam sincronizados externamente. Normalmente isso ocorre quando os métodos modificam dados estáticos que afetam outras threads.