O Java disponibiliza a concorrência por meio da linguagem e das APIs.
Ao contrário de linguagens que não possuem capacidade de multithreading integradas, e, portanto, devem fazer chamadas não portáveis para primitivas de multithreading do sistema operacional, o Java inclui primitivas de multithreading como parte da própria linguagem e de suas bibliotecas permitindo a manipulação portável de aplicativos multithreading entre diversas plataformas (CPU + Sistema Operacional) diferentes. Portanto, os aplicativos Android escritos em linguagem Java podem fazer uso desse poderoso recurso de programação de computadores.
A qualquer instante, uma thread pode estar em qualquer um dos seus vários estados disponíveis. Esse modelo de estados é similar àquele modelo de estado de processos visto no modulo anterior.
A figura a seguir exibe esses possíveis estados:
Um programa single - thread (thread única) inicia na etapa 1 e continua sequencialmente (etapa 2, etapa 3, etapa 4) até atingir a etapa final. Aplicações multithread permitem que você execute várias threads ao mesmo tempo, cada uma executando um passo por exemplo.
Cada thread é executada em seu próprio processo, então, teoricamente, você pode executar o passo 1 em uma thread e, ao mesmo tempo executar o passo 2 em outra thread e assim por diante. Isso significa que a etapa 1, etapa 2, etapa 3 e etapa 4 podem ser executadas simultaneamente. Utiliza-se multithread quando precisamos de desempenho e eficiência. Por exemplo, em um jogo de videogame, o ideal seria criar threads para o processamento das rotinas de imagens e outras para rotinas de áudio.
XUma nova thread sempre inicia seu ciclo de vida no estado de novo permanecendo nele até que o processo inicie a thread.
XO estado de executável é aquele em que a thread está de fato executando sua tarefa. Contudo, é importante observar que esse estado pertence a uma máquina virtual que é uma camada de abstração sobre o sistema operacional. Isso significa que do ponto de vista do sistema operacional a situação é demonstrada pela figura abaixo:
Ou seja, para o sistema operacional, o único estado de executável das threads que executam sobre máquina virtual, é representado como sendo dois possíveis estados ao nível do SO: pronto (ready) ou executando (running). O sistema operacional oculta esses dois estados da máquina virtual que visualiza apenas o estado executável (runnable).
XÀs vezes uma thread executável transita para o estado de espera enquanto aguarda uma outra thread realizar uma tarefa. Uma thread neste estado de espera transita de volta para o estado de executável apenas quando outra thread a notifica para continuar executando.
XUma thread pode entrar no estado de espera cronometrada por um intervalo especificado de tempo. Ela transita para o estado de executável quando o intervalo de tempo expira ou quando o evento pelo qual ela está esperando ocorre.
XUma thread executável entra no estado de terminado quando completa sua tarefa com sucesso ou, de outra forma, a termina, talvez por causa de um erro durante o seu processamento.
X