Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

<Artigo Original > ¨THREADS EM COMPUTAÇÃO – GUIA COMPLETO PARA ESTUDANTES

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

THREADS EM COMPUTAÇÃO – GUIA COMPLETO PARA ESTUDANTES

**Por Ricardo Costa Val do Rosario e Microsoft Copilot 365

Introdução

1. Nesta **thread de aprendizagem**, vamos explorar o conceito de Threads no contexto da computação, 
entender suas vantagens, desafios e ver exemplos práticos em código. 

2. O objetivo é que você compreenda o funcionamento e possa aplicar no desenvolvimento de sistemas mais 
eficientes e responsivos.

1. O que é uma Thread?

- Uma thread **(linha de execução**) é a **menor unidade de processamento** que pode ser agendada pelo sistema 
operacional. 

- Já um **processo** pode conter uma ou **várias threads,** que compartilham o mesmo espaço de memória e recursos. 
Assim temos: 

1. Single-thread: apenas uma linha de execução.

2. Multi-thread: múltiplas linhas de execução, que podem rodar em paralelo (em CPUs multi-core) ou de forma concorrente 
(em CPUs single-core).

2. Vantagens

1. Desempenho: 
- Aproveita melhor CPUs multi-core.
    
2. Responsividade: 
- Mantém a interface fluida enquanto tarefas pesadas rodam em segundo plano.

2. Economia de recursos: 
- Criar uma thread é mais leve que criar um processo.

4. Organização: facilita 
- Dividir tarefas complexas em partes menores.

3. Desafios

1. Condições de corrida (race conditions).

2. Necessidade de sincronização (locks, mutexes, semaphores).

3. Complexidade: depuração mais difícil.

4. Deadlocks: bloqueios mútuos entre threads.

4. Exemplos Práticos

Exemplo 1 – Threads em Python

import threading
import time

def tarefa(nome):
    for i in range(3):
        print(f"Thread {nome} executando passo {i+1}")
        time.sleep(1)

t1 = threading.Thread(target=tarefa, args=("A",))
t2 = threading.Thread(target=tarefa, args=("B",))

t1.start()
t2.start()

t1.join()
t2.join()


print("Execução finalizada!")

Exemplo 2 – Threads em Java

class MinhaThread extends Thread {
    private String nome;

    public MinhaThread(String nome) {
        this.nome = nome;
    }

    public void run() {
        for (int i = 1; i <= 3; i++) {
            System.out.println("Thread " + nome + " executando passo " + i);
            try { Thread.sleep(1000); } catch (InterruptedException e) {}
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MinhaThread t1 = new MinhaThread("A");
        MinhaThread t2 = new MinhaThread("B");

        t1.start();
        t2.start();
    }
}

Exemplo 3 – Sincronização em Python

import threading

contador = 0
lock = threading.Lock()

def incrementar():
    global contador
    for _ in range(100000):
        with lock:
            contador += 1

t1 = threading.Thread(target=incrementar)
t2 = threading.Thread(target=incrementar)

t1.start()
t2.start()
t1.join()
t2.join()

print("Valor final do contador:", contador)

5. Conclusão

1. Threads são essenciais para criar aplicações rápidas e responsivas;

2. Threads exigem cuidado com sincronização e concorrência para evitar problemas como 
**race conditions e deadlocks.** 

(LEIA O ARTIGO PUBLICADO A SEGUIR SOBRE O QUE SIGNIFICAM ESTES TERMOS)

Faça Como eu faço

- Chegou a hora de colocar a mão na massa e mostrar o que aprendeu e sabe.

- Como sugestões de Exercícios para os Alunos proponho as seguintes atividades:

1.	Implementar um programa multi-thread que baixe arquivos de forma simultânea.

2.	Criar um contador compartilhado entre threads sem sincronização e observar o erro.

3.	Modificar o código para usar locks e corrigir o problema.

4.	Desafiar-se: criar um chat simples onde cada cliente é gerenciado por uma thread.
E lembre-se, em casa de Dúvidas não deixe de entrar em contato com o pessoal do 
#Alura Scuba Team#. Eles são formidáveis e vão poder responder suas dúvidas. 

Nos vemos no próximo post. 
Até logo,
Ricardo. 
2 respostas
solução!

Oi, Ricardo!

Agradeço por compartilhar.

Gostei muito do jeito que você explicou os conceitos de threads e como trouxe exemplos práticos em Python e Java. Isso ajuda bastante a visualizar o funcionamento e as diferenças entre linguagens.

Continue explorando esses conceitos.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Oi Lorena,
Muito obrigado pelos seus comentários. Vou conferir sua sugestão de leitura agora mesmo. Tenho certeza de que coisas boas estão por vir.
Abraços,
Ricardo