Um ponto importante a ser observado após a execução deste exemplo, é que a sequência de execução das threads, muito possivelmente, será sempre diferente. Apesar de o exemplo utilizar-se de uma pausa aleatória (método yield) para tornar mais perceptível a aleatoriedade da execução das threads, considere que tal situação (execução aleatória) acontece mesmo sem a presença deste tipo de instrução no código.

O método yield na verdade avisa ao scheduler que está liberando a CPU e, portanto, o scheduler coloca outra thread para executar enquanto retorna a thread que disparou a mensagem yield para o final da fila de threads prontas (ready).

O uso do método yield é totalmente desaconselhado para aplicações reais, uma vez que causa atrasos na execução do código. Seu uso deve ser feito apenas para fins de teste ou debug do software.

Portanto, a finalidade de utilizar o método yield nesse exemplo é para apenas tornar perceptível ao ser humano a questão relativa à execução aleatória. Lembre-se de que o escalonador do sistema operacional e da máquina virtual definem, ambos, cada qual a sua política de escalonamento. Desta forma, é importante perceber que na programação concorrente/paralela não é possível fazer suposições de qual thread e nem por quanto tempo uma thread executará.

Copyright © 2016 AIEC.