Vaya directo al grano
En los círculos de TI, siempre que hablamos de concurrencia, estamos obligados a hablar de una serie de subprocesos que se ejecutan simultáneamente en una computadora. Si hay varios procesadores o un procesador de múltiples núcleos en esta computadora, entonces en realidad se está "ejecutando simultáneamente"; sin embargo, si la computadora tiene solo un procesador de un solo núcleo, entonces la "ejecución simultánea" es solo apariencias;
Todos los sistemas operativos modernos admiten la ejecución simultánea de tareas. Podrás escuchar música y leer noticias online sin retrasar el primer correo electrónico. Podemos decir que esta concurrencia es concurrencia a nivel de proceso. Dentro del proceso, también puedo ver que hay muchas tareas concurrentes. Llamamos subprocesos a las tareas concurrentes que se ejecutan en un proceso.
Otro concepto común relacionado con la concurrencia es el paralelismo. Existen algunas diferencias y algunas conexiones entre concurrencia y paralelismo. Algunos programadores (autor, transcrito como "programador") creen que ejecutar una aplicación con múltiples subprocesos en un procesador de un solo núcleo es concurrencia y, además, puede observar la ejecución del programador cuando su programa se ejecuta con múltiples subprocesos. en procesadores múltiples o procesadores multinúcleo, son paralelos. También hay algunos programadores que piensan que si los subprocesos de la aplicación no se ejecutan en un orden preestablecido, es concurrencia para simplificar la solución del problema, se utiliza un subproceso y estos subprocesos se ejecutan en un orden determinado; esto es paralelismo.
Este capítulo utilizará doce ejemplos para demostrar cómo utilizar la API de Java7 para realizar algunas operaciones básicas de subprocesos. Podrás ver, en un programa Java, cómo crear y ejecutar hilos, cómo controlar la ejecución de hilos, cómo manipular un grupo de hilos como una unidad, etc.
En esta sección, aprenderemos cómo crear un hilo en un programa Java y cómo ejecutarlo. En un programa Java, todo es un Objeto, al igual que los hilos. Hay dos formas de crear hilos:
1. Heredar la clase Thread y anular el método run();
2. Cree una clase que implemente la interfaz Runnable, luego cree un objeto de la clase Thread y luego pase la instancia de la clase que implementa la interfaz Runnable como parámetro a la instancia de la clase Thread.
En esta sección, usaremos el segundo método para crear diez subprocesos y ejecutarlos. Cada hilo calcula e imprime el producto de dos números enteros hasta diez.
lo sabes
Siga los pasos que se describen a continuación para implementar este ejemplo:
1. Cree una clase llamada Calculadora e implemente la interfaz Runnable. El código es el siguiente:
Copie el código de código de la siguiente manera:
La calculadora de clase pública implementa Runnable {
2. Declare un atributo entero privado llamado número e implemente el constructor de esta clase para inicializar el atributo que acaba de declarar. El código es el siguiente:
Copie el código de código de la siguiente manera:
número interno privado;
Calculadora pública (número int) {
este.número = número;
}
3. Implemente el método run(), que es el programa (instrucción) que se ejecuta cuando se ejecuta el hilo que creamos, por lo que este método se utiliza para calcular la tabla de multiplicar. El código específico es el siguiente:
Copie el código de código de la siguiente manera:
@Anular
ejecución pública vacía() {
para (int i = 0; i < 10; i++) {
System.out.printf("%s: %d * %d = %d/n",
Thread.currentThread().getName(),
número, i, i * número);
}
}
4. Ahora es el momento de implementar la clase principal de la aplicación de muestra. Cree una clase llamada Main y agregue el método principal en la clase. El código es el siguiente:
Copie el código de código de la siguiente manera:
clase pública principal {
público estático vacío principal (String [] argumentos) {
5. Dentro del método main(), cree un bucle for que lo recorra diez veces. En el cuerpo del bucle, cree una calculadora de objetos de la clase Calculadora, cree un hilo de objetos de la clase Thread y pase la calculadora como parámetro de la. constructor al hilo. Finalmente, llame al método start() del objeto hilo. El código es el siguiente:
Copie el código de código de la siguiente manera:
para (int i = 0; i < 10; i++) {
Calculadora calculadora = nueva Calculadora (i);
Hilo hilo = nuevo hilo (calculadora);
hilo.start();
}
6. Ejecute este programa para ver cómo se ejecutan diferentes subprocesos al mismo tiempo.
saber por qué
El siguiente es un fragmento de salida impreso en la consola cuando se ejecuta el programa. Podemos ver que todos los subprocesos que creamos se están ejecutando al mismo tiempo.
Copie el código de código de la siguiente manera:
Hilo-3: 3 * 5 = 15
Hilo-0: 0 * 2 = 0
Hilo-3: 3 * 6 = 18
Hilo-1: 1 * 6 = 6
Hilo-1: 1 * 7 = 7
Hilo-3: 3 * 7 = 21
Hilo-3: 3 * 8 = 24
Hilo-0: 0 * 3 = 0
Hilo-0: 0 * 4 = 0
Hilo-3: 3 * 9 = 27
Hilo-1: 1 * 8 = 8
Todos los programas Java ejecutan al menos un hilo. Cuando ejecutamos un programa Java, la máquina virtual Java (en lo sucesivo, JVM) ejecutará un hilo y llamará al programa que contiene el método main().
Cuando se llama al método start() del objeto Thread, se crea otro hilo. Cuántas veces se llama al método start() y cuántos subprocesos se crearán.
Cuando todos los subprocesos hayan completado la ejecución, el programa Java finalizará. (A menos que en circunstancias especiales, se ejecuten todos los subprocesos que no sean demonios). Cuando el subproceso inicial (como el subproceso que ejecuta el método main()) finaliza, los subprocesos restantes continuarán ejecutándose hasta que se complete la tarea informática. Cuando uno de los subprocesos llama a System.exit() y solicita a la JVM que finalice el programa, todos los subprocesos finalizan su ejecución.
Cuando se llama al método run() del objeto Thread, el hilo no se creará; de manera similar, cuando se llama al método run() de la clase que implementa la interfaz Runnable, no se creará el hilo. Un hilo se crea solo cuando se llama al método start() del objeto Thread.
interminable
Como se mencionó al principio de esta sección, hay otra forma de crear un hilo: heredar la clase Thread y anular el método run(). De esta manera, puede crear un objeto de la subclase Thread y luego llamar a start(). método del objeto. Crear hilo.
Copie el código de código de la siguiente manera:
Mientras me estaba preparando para la entrevista, encontré mucha información sobre subprocesos múltiples de Java, incluido este "Libro de cocina de concurrencia de Java 7". Las explicaciones son muy simples y fáciles de entender, muy adecuadas para amigos que no lo saben. mucho sobre subprocesos múltiples pero quiero aprenderlo en serio. Después de buscar, no pude encontrar la versión china, así que decidí hacer yo mismo suficiente comida y ropa. Por lo tanto, planeamos publicar una traducción no oficial, y el título provisional se titula "Colección de ejemplos de concurrencia Java7".
Usar doctrina
Este artículo está traducido del "Libro de cocina de concurrencia de Java 7" (D Gua Ge lo robó como "Colección de ejemplos de concurrencia de Java 7") y solo se utiliza como material de aprendizaje. No puede utilizarse con fines comerciales sin autorización.
Pequeño éxito
El libro original no tiene el código completo, lo que no es conveniente para verlo. Por lo tanto, Brother D Gua agregó una sección para mostrar la versión completa del código que se muestra en esta sección.
El código completo de la clase Calculadora es el siguiente:
paquete com.diguage.books.concurrencycookbook.chapter1.recipe1;
/**
* Fecha: 2013-09-13
* Hora: 21:42
*/
La calculadora de clase pública implementa Runnable {
número interno privado;
Calculadora pública (número int) {
este.número = número;
}
@Anular
ejecución pública vacía() {
para (int i = 0; i < 10; i++) {
System.out.printf("%s: %d * %d = %d/n",
Thread.currentThread().getName(),
número, i, i * número);
}
}
}
El código completo de la clase principal.
Copie el código de código de la siguiente manera:
paquete com.diguage.books.concurrencycookbook.chapter1.recipe1;
/**
* Fecha: 2013-09-13
* Hora: 19:46
*/
clase pública principal {
público estático vacío principal (String [] argumentos) {
para (int i = 0; i < 10; i++) {
Calculadora calculadora = nueva Calculadora (i);
Hilo hilo = nuevo hilo (calculadora);
hilo.start();
}
}
}