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.