¿Puedes explicar el uso de subprocesos de Java?
Con el rápido desarrollo de las computadoras, los sistemas operativos de las computadoras personales también han adoptado diseños multitarea y de tiempo compartido, llevando a los sistemas de computadoras personales funciones que solo estaban disponibles en las computadoras grandes en los primeros días. Generalmente, los sistemas operativos que pueden ejecutar múltiples programas al mismo tiempo tienen el concepto de proceso. Un proceso es un programa en ejecución y cada proceso tiene su propio espacio de memoria independiente y un conjunto de recursos del sistema. En el concepto de proceso, los datos internos y el estado de cada proceso son completamente independientes. Los programas Java ejecutan el flujo del programa a través del control de flujo. El control de flujo de una única secuencia en el programa se denomina subproceso múltiple, lo que significa que se pueden ejecutar varios subprocesos diferentes simultáneamente en un solo programa para realizar diferentes tareas. Multithreading significa que pueden parecer que varias líneas de un programa se ejecutan simultáneamente aproximadamente al mismo tiempo.
Un hilo es similar a un proceso. Es un fragmento de código que cumple una función específica. Es el control de flujo de una sola secuencia en el programa pero a diferencia de un proceso, múltiples hilos del mismo; El tipo solo comparte una parte de la memoria y un conjunto de recursos del sistema, mientras que los datos del hilo en sí generalmente solo tienen los datos de registro del microprocesador y una pila utilizada cuando se ejecuta el programa. Por lo tanto, cuando el sistema genera un subproceso o cambia entre subprocesos, la carga es mucho menor que la del proceso. Debido a esto, los subprocesos se denominan procesos livianos. Un proceso puede contener varios subprocesos.
Un hilo es un flujo secuencial de control dentro de un programa.
1. Proceso: cada proceso tiene código y espacio de datos independientes (contexto del proceso), y el cambio de proceso es costoso.
2. Subproceso: un proceso liviano. Los subprocesos del mismo tipo comparten código y espacio de datos. Cada subproceso tiene una pila en ejecución y un contador de programa (PC) independientes, y la sobrecarga del cambio de subprocesos es pequeña.
3. Multiproceso: En el sistema operativo se pueden ejecutar múltiples programas de tareas al mismo tiempo.
4. Multihilo: En una misma aplicación se ejecutan múltiples flujos de secuencia simultáneamente.
6.1.1 Modelo conceptual de subprocesos
Java admite inherentemente subprocesos múltiples. Todas sus clases están definidas bajo subprocesos múltiples. Java utiliza subprocesos múltiples para hacer que todo el sistema sea un sistema asíncrono. . Los subprocesos en Java se componen de tres partes, como se muestra en la Figura 6.1.
1. CPU virtual, encapsulada en la clase Java.lang.Thread.
2. El código ejecutado por la CPU se pasa a la clase Thread.
3. Los datos procesados por la CPU se pasan a la clase Thread.
Figura 6.1 Hilo
6. 1. 2 Cuerpo del hilo (1)
Los hilos Java se implementan a través de la clase Java.lang.Thread. Cuando generamos un objeto de la clase Thread, se genera un nuevo hilo.
Esta instancia de subproceso representa el subproceso real en el intérprete de Java, a través del cual puede iniciar el subproceso, finalizarlo, suspenderlo, etc. Cada subproceso está en el paquete de software Java Java.lang a través del clase Thread. Definido en, su método de construcción es:
public Thread (grupo ThreadGroup, destino ejecutable, nombre de cadena
Entre ellos, grupo indica el grupo de subprocesos al que pertenece el subproceso); pertenece; el objetivo se ejecuta realmente El objeto de destino del cuerpo del hilo, que debe implementar la interfaz Runnable; Cada hilo en Java tiene su propio nombre. Java proporciona diferentes constructores de clases Thread que permiten asignar nombres a los hilos. Si el nombre es nulo, Java proporciona automáticamente un nombre único.
Cuando un parámetro del constructor anterior es nulo, podemos obtener los siguientes constructores:
public Thread ();
public Thread (objetivo ejecutable);
Hilo público (objetivo ejecutable, nombre de cadena);
Hilo público (nombre de cadena)
Hilo público (grupo de grupo de subprocesos, destino ejecutable); p>
hilo público (grupo ThreadGroup, nombre de cadena);
una declaración de clase que implementa la interfaz Runnable puede actuar como un cuerpo de hilo. Solo se ejecuta un método ():
Cualquier objeto que implemente la interfaz Runnable se puede utilizar como objeto de destino de un hilo. La clase Thread también implementa la interfaz Runnable, por lo que podemos pasar. para implementar cuerpos de hilo.
(1) Defina una clase de hilo, que hereda la clase de hilo Thread y anula el método run () Al inicializar una instancia de esta clase, el objetivo puede ser nulo, lo que indica que esta instancia se ejecutará. el cuerpo del hilo. Dado que Java solo admite herencia única, las clases definidas de esta manera no pueden heredar otras clases principales.
(2) Proporcione una clase que implemente la interfaz Runnable como el objeto de destino de un hilo. Al inicializar un objeto de hilo de la clase Thread o subclase Thread, pase el objeto de destino a la instancia del hilo y el. target El objeto proporciona el cuerpo del hilo run(). En este momento, las clases que implementan la interfaz Runnable aún pueden heredar otras clases principales.
Cada hilo completa su operación a través del método run() de un objeto Thread específico. El método run() se llama cuerpo del hilo. La Figura 6.2 muestra los diferentes estados de un subproceso Java y los métodos llamados para realizar la transición entre estados.
Figura 6.2 Estado del hilo
1. Estado de creación (nuevo hilo)
Cuando se ejecutan las siguientes declaraciones, el hilo está en estado de creación: p>
Thread myThread = new MyThreadClass();
Cuando un hilo está en estado de creación, es solo un objeto de hilo vacío y el sistema no le asigna recursos.
2. Estado ejecutable (Ejecutable)
Hilo myThread = new MyThreadClass(
myThread.start(
Cuándo); un subproceso está en un estado ejecutable, el sistema asigna los recursos del sistema que necesita al subproceso, programa su ejecución y llama al método de ejecución del subproceso, lo que hace que el subproceso esté en un estado ejecutable. Cabe señalar que este estado no es un estado de ejecución (en ejecución), porque es posible que el hilo no se esté ejecutando en realidad. Dado que muchas computadoras tienen un solo procesador, es imposible ejecutar todos los subprocesos ejecutables al mismo tiempo. El sistema en ejecución Java debe implementar una programación para garantizar que estos subprocesos compartan el procesador.
3. No ejecutable
Las razones para ingresar al estado no ejecutable son las siguientes:
1) Se llama al método sleep()
; p>
2) Se llama al método suspender();
3) Para esperar una variable de condición, el hilo llama al método wait()
4) Entrada; y el flujo de salida se bloquea.
El estado no ejecutable también se denomina estado bloqueado (Bloqueado). El estado del hilo en el que el sistema no puede ejecutarse por algún motivo (entrada/salida, espera de mensajes u otras condiciones de bloqueo). En este momento, incluso si el procesador está inactivo, el hilo no se puede ejecutar.
4. Estado de muerte (Dead)
La terminación de un hilo generalmente se puede lograr mediante dos métodos: cancelación natural (el hilo completa la ejecución) o detención (llamando a stop() método) . Actualmente no se recomienda finalizar la ejecución del hilo llamando a stop(), sino dejar que el hilo termine de ejecutarse.
.net/Article/kfyy/java/jc/200410/83.html