Olá!
Estou com um problema com uma thread minha. Não enxergo o problema e gostaria que alguém me desse uma luz.
public interface ProdutorConsumidor
{
public void setValor(int posicao, int valor);
}
public class Produtor implements Callable<Integer>
{
SharedBuffer sharedBuffer;
private static Random r = new Random();
public Produtor(SharedBuffer sharedBuffer)
{
this.sharedBuffer = sharedBuffer;
}
public Integer call() throws Exception
{
System.out.printf("%-40s%s\t\t%s\n%-40s%s\n\n", "Posição", "Vetor", "Valor",
"---------", "------\t\t-------");
for(int posicao = 0; posicao < 100; posicao++ )
{
sharedBuffer.setValor(posicao, r.nextInt(100));
}
return 1;
}
}
public class SharedBuffer implements ProdutorConsumidor
{
public static final int tamanhoBuffer = 10;
public static int buffer [] = new int[tamanhoBuffer];
public void setValor(int posicao, int valor)
{
synchronized(this)
{
buffer[posicao%tamanhoBuffer] = valor;
System.out.printf("%-40s%s\t\t%s\n%-40s%s\n\n", posicao, posicao%tamanhoBuffer, valor);
}
}
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class SharedBufferMain
{
public static void main(String[] args)
{
ExecutorService executorService = Executors.newCachedThreadPool();
SharedBuffer sharedBuffer = new SharedBuffer();
FutureTask<Integer> futureTask1 = new FutureTask<Integer>(new Produtor(sharedBuffer));
executorService.execute(futureTask1);
executorService.shutdown();
}
}
O que acontece: crio a thread na main e chamo Produtor. Quero fazer uma lista circular de 10 posições.
Em “call”, na classe Produtor, eu faço um loop de 100 vezes. O que acontece é que a thread entra no loop uma vez (classe sharedBuffer), imprime o que tem que imprimir e depois pára.
Ele deveria continuar por mais 99 vezes, mas não faz isso.
Pode ser um erro bobo meu, mas não vejo. Alguém faz o favor de me ajudar?
Estou treinando o uso de FutureTask, então, claramente, eu não precisaria usá-lo porque não quero retorno na call. Ignorem isso.
Obrigado.