Olá! Estava tentando misturar os conceitos desta aula com os da anterior para processar as notas fiscais em paralelo. Tentei utilizar o seguinte código para criar um pool de 2 threads e conseguir processar duas notas por vez:
public static void main(String[] args) {
var fixedThreadPool = Executors.newFixedThreadPool(2);
System.out.println("A thread do TesteEnvioNaoBloqueante é: " + Thread.currentThread().getName());
NotaFiscal nota1 = new NotaFiscal("1) João", 39.89, LocalDate.now());
NotaFiscal nota2 = new NotaFiscal("2) Maria", 39.89, LocalDate.now());
NotaFiscal nota3 = new NotaFiscal("3) Bonner", 20.05, LocalDate.now());
NotaFiscal nota4 = new NotaFiscal("4) Bilbo", 15.02, LocalDate.now());
var notas = List.of(nota1, nota2, nota3, nota4);
var publisher = new SubmissionPublisher<NotaFiscal>(fixedThreadPool, 2);
var subscriber = new NotaFiscalSubscriber();
publisher.subscribe(subscriber);
notas.forEach(publisher::submit);
System.out.println("Você irá receber a nota fiscal no seu email");
var scanner = new Scanner(System.in);
scanner.nextLine();
scanner.close();
publisher.close();
fixedThreadPool.shutdown();
}
Sendo que na classe NotaFiscalSubscriber, utilizo this.subscription.request(2) para requisitar duas mensagens por vez. No entanto, o processamento se dá de forma sequencial e vem sempre da thread pool-1-thread-2. O que preciso fazer para implementar tal paralelismo?