Saudações, bem-vindo de volta. Scott Stanlick aqui. Nestas lições, vamos dar uma olhada no threading. Veremos o thread principal do Java. Teremos um pico em vários ciclos de vida do thread. Vamos dar uma olhada nos pools de execução de threads e agendadores de threads. Nesta lição específica, vamos começar dando uma olhada nos tópicos propriamente ditos. Normalmente é aqui que você começaria em uma discussão sobre tópicos. Então, a primeira coisa que quero mostrar é minha máquina que eu estou correndo. Eu tenho quatro processadores, então esta é uma máquina de quatro núcleos. Podemos ver que tenho 236 processos ou aplicativos ou IDs de processo em execução em 2.906 threads. Portanto, há muitos, muitos threads na máquina, muito mais threads do que processos e certamente mais threads do que processadores. E então esses threads passam por mudanças de estado. Eles são executáveis, eles estão esperando, eles estão bloqueando, estão esgotados, estão dormindo. Veremos, veremos como tudo isso se desenrola aqui em apenas um minuto. Então, primeiro, o que é um fio? Bem, um thread é um processo leve que podem ser executados independentemente pelo sistema operacional. Na verdade, pode haver muitos tópicos todos funcionando simultaneamente. É como uma rodovia de várias pistas contra uma estrada de pista única. Assim, podemos executar vários threads simultaneamente ou em paralelo. Portanto, obtendo muito mais trabalho feito na mesma quantidade de tempo. Então, a primeira coisa que quero mostrar aqui é criamos uma classe chamada thread de upload de arquivo. Então com certeza é um fio, ou seja, tem um método run. Então, o que este segmento vai fazer será determinado pelo que está codificado no método run. Porque a vida útil do fio é o tempo necessário para executar o método run. Então aí está o nosso fio. Vai simular um upload de arquivo. Então, o primeiro teste diz que o encadeamento foi feito errado e vamos ver como é. Quando eu executo isso, deve sair e descobrir quantos processadores eu tenho, que acabamos de ver, tenho quatro processadores. Portanto, não estamos sobrecarregando o hardware aqui, não estamos criando mais tópicos do que temos processadores neste momento. Então, estou chamando o método run no thread, quatro deles realmente aqui. E posso ver que todos esses tópicos rodaram no método principal com prioridade 5. E isso levou 2,2098 segundos. Bem, isso não se parece com threading para mim. Parece que essas coisas foram empilhadas em um único arquivo. E eles eram. Eles eram porque você não chama o método run diretamente. Você chama o método de início de thread. E o método start aciona o maquinário de modo que as tarefas em segundo plano sejam criadas e geradas. Então vamos fazê-lo corretamente e vamos usar o método start no thread e vamos ver como é esse mesmo cenário. Os processadores disponíveis ainda são quatro, e então eu vou ver os mesmos quatro carregamentos de arquivo, os mesmos quatro uploads de arquivo, mas agora você pode ver que são 0,547 segundos. E também posso ver que nem todos correram no método principal. Este foi o Tópico 1, Tópico 2, Tópico 3, Tópico 0. Então, basicamente, eles eram threads independentes, e agora podemos ver que fizemos a mesma quantidade de trabalho em um quarto do tempo. Então, o próximo cara que vamos dar uma olhada é como podemos nomear threads. Por exemplo, isso é meio difícil para descobrir o que é o quê, certo? Especialmente quando você está olhando para rastreamentos de pilha e despejos de thread e esse tipo de coisa. Então, o que eu quero fazer é novamente o mesmo cenário, mas eu quero definir o nome do tópico para número-cidade-conhecimento e usará apenas o "I" no loop quatro aqui. Portanto, devemos ver a cidade do conhecimento número 1, número 2, número 3, número 4. E, novamente, estamos iniciando corretamente. Agora, o sistema operacional irá arbitrariamente executar esses tópicos. E isso porque não definimos uma prioridade de thread. Então, todos eles estão executando a prioridade 5. Portanto, cada um deles tem a mesma prioridade. Portanto, não há como dizer necessariamente qual thread será executada primeiro. E como você pode ver aqui, a cidade do conhecimento número 1 foi executada primeiro, 0 correu por último, na verdade. E se rodarmos de novo, você verá uma variedade de variedades lá. É imprevisível, a ordem em que eles vão correr. A menos que você faça isso, é claro. Se você definir a prioridade, se você tiver um tópico específico, digamos está imprimindo faturas de clientes e o cliente está parado no balcão, você provavelmente quer o fio que está fazendo a impressão ter maior prioridade, para dar uma prioridade de execução mais alta. E então o que estamos fazendo aqui é a mesma ideia. Vamos executar este upload de arquivo quatro vezes, exceto que três deles terão prioridade 9. Estou apenas fazendo um pequeno switcheroo aqui. Se "I" for 3, definiremos a prioridade para 5. Se "eu" for algo diferente de 3, vamos definir a prioridade para 9. Portanto, o que devemos ver é a última execução da cidade do conhecimento número 3. Porque os outros três tinham uma prioridade mais alta então vamos provar isso. E aconteceu. Assim, podemos ver a cidade do conhecimento número 2, número 1, número 0. Eles estavam todos rodando com prioridade 9 e eles superaram esta cidade do conhecimento número 3, que estava rodando na prioridade 5 então foi servido por último. Obrigado por assistir.