A solução de problemas na programação concorrente utiliza variações a partir de algumas formas básicas.
Um dos princípios de solução representa a seqüência típica necessária para garantir a correta execução de um método que tem acesso a recursos compartilhados. A estratégia básica é fazer primeiro a verificação das condições necessárias para execução e, após a execução, "limpar o caminho" para outras linhas de execução.
Em Java, essa estrutura de camadas pode ser representada na forma:
verificaCondicoes(); try { oMetodo(); } finally { acertaCondicoes(); }
Outro padrão comum de solução é a utilização de um adaptador
para permitir que um método (fazAlgo()
) de uma
classe da aplicação (UmaClasse
) possa ser executado
como uma linha de execução independente:
class UmaClasseAdaptadora implements Runnable { private final UmaClasse adaptada; public UmaClasseAdaptadora(UmaClasse u) { adaptada = u; } public void run() { adaptada.fazAlgo(); } }