[quote=entanglement][code]
/**
*
*/
package guj;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
class Pedido {
public int codItem;
public int quantidade;
public double preco;
public int idVendedor;
public int idPedido;
public Pedido(int codItem, int quantidade, double preco, int idVendedor, int idPedido) {
this.codItem = codItem;
this.quantidade = quantidade;
this.preco = preco;
this.idVendedor = idVendedor;
this.idPedido = idPedido;
}
public String toString() {
return String.format("item %d, qtd %d, preço %.2f, vendedor %d, pedido %d", codItem, quantidade, preco, idVendedor,
idPedido);
}
}
// O cara que tira os pedidos (produtor)
class Vendedor implements Runnable {
@Override
public void run() {
for (int idPedido = 1; idPedido <= nPedidos; idPedido++) {
// Fazendo um novo pedido…
Pedido pedido = new Pedido (100+idPedido, 2000+idPedido10, 100.0 + 10idPedido, idVendedor, idPedido);
System.out.printf (“Vendedor fazendo o pedido %s%n”, pedido.toString());
es.submit (new SolicitacaoPedido (pedido, 1700)); // 1700ms é o tempo estimado para o pedido ser processado
// Esperando antes de fazer um novo pedido.
try {
Thread.sleep(ms / 2 + r.nextInt(ms));
} catch (InterruptedException ex) {
}
}
}
/**
* Simula um vendedor.
*
* @param idVendedor O id do vendedor.
* @param nPedidos O número de pedidos que o vendedor vai tirar.
* @param ms O tempo entre uma venda e outra (+/- 50%).
*/
public Vendedor(int idVendedor, int nPedidos, int ms, ExecutorService es) {
this.idVendedor = idVendedor;
this.nPedidos = nPedidos;
this.ms = ms;
this.es = es;
}
private int nPedidos;
private int idVendedor;
private int ms;
private ExecutorService es;
private static Random r = new Random();
}
// O cara que atende aos pedidos (consumidor)
class SolicitacaoPedido implements Runnable {
public SolicitacaoPedido (Pedido pedido, int ms) {
this.pedido = pedido;
this.ms = ms;
}
@Override
public void run() {
// Processa apenas um pedido (note que o “esOperarios” pega esta tarefa, ou pedido,
// e faz o devido processamento de um único pedido.
// Este é o tempo simulado de processar o pedido:
long t = System.currentTimeMillis();
try {
Thread.sleep(ms / 2 + r.nextInt(ms));
} catch (InterruptedException ex) {
}
System.out.printf (“Pedido atendido pela thread %s após %d ms: %s%n”,
Thread.currentThread().getName(),
System.currentTimeMillis() - t,
pedido.toString());
}
private Pedido pedido;
private int ms;
private static Random r = new Random();
}
/**
}
[/code][/quote]
Maravilha de exemplo!!
Vlw pela ajuda! agora eu entendi como esse trem funciona!
VlWW!!!