Galera existe algum modo de uma thread esperar outras 4 threads acabarem para ela começar?
1 curtida
Exemplo de uso:
import java.util.Random;
import java.util.concurrent.CountDownLatch;
public class Main {
public static void main(String[] args) {
int numThreads = 4;
CountDownLatch ferrolho = new CountDownLatch(numThreads);
for (int i = 0; i < numThreads; i++)
new Thread(() -> {
try {
System.out.println("Thread " + Thread.currentThread().getName() + " vai dormir...");
Thread.sleep(new Random().nextInt(5) * 1000); // dorme de 0 a 4 segundos
System.out.println("Thread " + Thread.currentThread().getName() + " acordou!");
ferrolho.countDown();
} catch (InterruptedException e) {
System.out.println("Deu ruim no sleep.");
Thread.currentThread().interrupt();
}
}).start();
try {
ferrolho.await(); // espera 4 countDowns no latch
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Essa mensagem só vai ser impressa quando todas as 4 threads terminarem de executar e chamarem o método countDown no Latch.");
}
}
lvbarbosa Obrigado , vou dar uma olhada agora. Meu professor pediu para pegar uma imagem colorida e transformar ela em uma escala de cinza , mas preciso usar 4 threads. unico modo que pensei foi dividir a image em uma matriz e dividir entre 4 threads.
Essa é uma técnica comum de divisão de trabalho. Nesse caso, é uma divisão boa, pois o tempo de conclusão das 4 sub-áreas vai ser similar.
Existem casos onde uma Thread pode acabar de executar muito mais rápido do que as outras e ficar ociosa, e portanto a divisão deve ser repensada. Certamente esse não é um desses casos.