Recientemente estoy manteniendo un proyecto Java y en el grupo estamos charlando sobre los pros y los contras de Java. Desafortunadamente, algunos fanáticos de Java siempre afirman que el rendimiento ya no es tan malo como el de C ++, y muchas bibliotecas estándar están escritas por maestros, cuán estables son, etc. Simplemente lo estudié detenidamente, y una de las instrucciones que me dieron fue que para entregar mensajes entre hilos basta con usar BlockingQueue, que ha sido encapsulado en java.
Como es suficiente, escribamos código para probarlo. Simplemente escriba un pequeño programa y haga algunas pruebas:
importar base.MyRunnable;
prueba de clase pública
{
principal vacío estático público (String [] argumentos)
{
Cola BlockingQueue<Integer> = new LinkedBlockingQueue<Integer>();
java.lang.Runnable r = new MyRunnable(cola);
Hilo t = nuevo hilo (r);
t.start();
mientras (verdadero)
{
intentar
{
mientras (verdadero)
{
para(int i =0;i < 10000;i++)
{
cola.oferta(i);
}
}
}
captura (Excepción e)
{
e.printStackTrace();
}
}
}
}
//Paquetes que deben agregarse
base del paquete;
importar java.lang.Runnable;
importar java.util.concurrent.*;
importar java.util.*;
clase pública MyRunnable implementa Runnable
{
público MyRunnable (cola BlockingQueue<Integer>)
{
this.queue = cola;
}
ejecución pública vacía()
{
Fecha d = nueva Fecha();
hora de inicio larga = d.getTime();
System.err.println(hora de inicio);
recuento int = 0;
mientras (verdadero)
{
intentar
{
Entero i = this.queue.poll();
si (yo! = nulo)
{
contar++;
}
si (cuenta == 100000)
{
Fecha e = nueva fecha();
hora de finalización larga = e.getTime();
System.err.println(recuento);
System.err.println(hora de finalización);
System.err.print(hora de finalización - hora de inicio);
romper;
}
}
captura (Excepción e)
{
}
}
}
cola privada BlockingQueue<Integer>;
}
Utilicé oferta y encuesta en el código de prueba anterior. Echemos un vistazo a estas dos funciones de implementación.