olá, estou com um problema em uma lista bloqueante e não estou conseguindo entender o porque.
package core;
import interfaces.*;
import com.*;
import java.nio.ByteBuffer;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import proxy.*;
import util.*;
public class Worker extends Thread implements InterfaceWorker {
public Worker(String Id) {
try {
this.jobsList = new LinkedBlockingQueue<InterfaceJob>();
this.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
try {
try {
job = jobsList.take();
this.workerWorkload -= job.getWorkload();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Resolve o job
job.solve();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void newJob(String jobId, byte[] jobDescription) {
try {
InterfaceJob job = new Fibo(jobDescription);
this.workerWorkload += job.getWorkload();
job.setID(jobId);
jobsList.put(job);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Job () {
....
}
Existe uma classe main que instancia essa worker e nela possui um for que fica enviando, chamando o metodo newJob. O correto seria que essa fila ficasse sempre recebendo jobs, mas isso não esta acontecendo, ela somente recebe um novo job quando o que esta dentro do run() executa. Minha pergunta é se essa blocking queue bloqueia após o take e não deixa adicionar mais nada dentro dela.
Pensei que ela bloqueasse somente se não existir mais valores dentro dessa fila.