Red de conocimiento informático - Conocimiento sistemático - Un breve análisis del mecanismo de programación multiproceso de Java

Un breve análisis del mecanismo de programación multiproceso de Java

El subproceso múltiple es una característica importante del lenguaje Java. El subproceso múltiple significa que hay N cuerpos de ejecución trabajando al mismo tiempo de acuerdo con varias pistas de ejecución diferentes. Los subprocesos del proceso del programa pueden comprender el programa desde diferentes niveles. perspectivas.Es un fragmento de código estático que puede entenderse como un conjunto de comandos de computadora. Es un proceso de ejecución dinámica de este programa, desde la carga del código hasta la finalización de la ejecución. Proceso. Un proceso puede producir muchos procesos durante la ejecución. Cada hilo puede entenderse como un subconjunto del proceso desde la producción hasta la destrucción. Yo personalmente uso una metáfora que creo que es bastante apropiada para comparar los tres programas. en QQ significa iniciar un proceso de este programa. Enviar mensajes a amigos en QQ parece un hilo en el proceso. ¿Es esta una metáfora apropiada? Los hilos también tienen un estado y un ciclo de vida. Hilo principal predeterminado para la aplicación. Para la aplicación del programa, el método principal es un hilo principal. El lenguaje Java utiliza objetos de la clase Thread y sus subclases para representar la creación de hilos. /p>

) Nuevo: Cuando se declara y crea un objeto de la clase Thread o su subclase, el nuevo objeto de hilo está en el nuevo estado. En este momento, ya tiene el espacio de memoria correspondiente y otros recursos.

) Listo: el subproceso en el nuevo estado se inicia. Después de eso, ingresará a la cola de subprocesos y se pondrá en cola para esperar el servicio CUP. En este momento, tiene las condiciones para ejecutarse. Es el turno de la CPU, puede iniciar su propio ciclo de vida independientemente del hilo principal que lo creó

) Ejecutar: el hilo listo es Programar y obtener el procesamiento de CUP e ingresar al estado de ejecución de cada objeto del Hilo. La clase y sus subclases tienen un método run() importante. Cuando el objeto de subproceso está programado para su ejecución, llamará automáticamente al método run() de este objeto desde La primera oración del código comienza a ejecutarse, por lo que la operación del subproceso debe realizarse. escribirse en el método run()

) Bloqueo: si un hilo en ejecución no puede ejecutarse en determinadas circunstancias Después de ingresar al estado de bloqueo, no puede ingresar al estado de cola Solo cuando el. La causa del bloqueo desaparece. ¿Puede el subproceso continuar entrando en el estado de cola y esperar el procesamiento de CUP?

) Muerte: un subproceso en estado inactivo no tiene la capacidad de continuar con la ejecución. La razón principal de la muerte. La característica de un subproceso de capacidad es que el subproceso que se ejecuta normalmente completó todo el trabajo y ejecutó el método run (). Además, fue terminado por la fuerza por adelantado

La programación de subprocesos también tiene prioridades, es decir. Por ejemplo, la CPU puede procesar la misma disposición de alta prioridad. Se divide principalmente en tres niveles. Los números representados por alta, media y baja son, respectivamente, tres constantes que no se pueden cambiar. La constante de prioridad ordinaria es NORM_PRIORITY. La constante de prioridad más alta es MAX_PRIORITY. Generalmente, la prioridad del hilo principal es normal. Además, la prioridad del hilo establecida automáticamente por el sistema se puede modificar mediante el método setPriority (int a). la clase Thread.

Hay dos formas de implementar subprocesos múltiples en Java: una es crear su propia subclase de subprocesos y la otra es implementar una interfaz Runnable sin importar de qué manera termine. Al leer, debe usar la clase Thread y sus métodos. La clase Thread tiene dos constructores, public Thread (), que se usa para crear un objeto de hilo público (Runnable r) Cree el parámetro del objeto de hilo r para convertirse en el creado. objeto de destino. Este objetivo debe implementar la interfaz Runnbale. Proporciona el cuerpo del método run() de la interfaz y luego opera en el cuerpo del método. El hilo creado con los dos métodos de construcción es un proceso de estado recién creado. Inicie el método start () del hilo para iniciar el objeto del hilo, el hilo ingresa al estado en cola, que es el estado listo, y luego el hilo opera el método run (). El contenido de este método es el contenido procesado por el sistema. Si desea poner el hilo en estado de suspensión, puede llamar a sleep() Al método se le puede asignar un parámetro que represente

Si se proporcionan dos parámetros para milisegundos de inactividad, representa el segundo para terminar el hilo. Utilice el método yield() para determinar si el hilo está destruido. Puede utilizar el método idAlive() para determinar si el hilo está vivo. La interfaz ejecutable tiene solo un método, el método run(). Implementamos esta interfaz para realizar operaciones. Escribimos el código en este método y luego pasamos la instancia de la clase que implementa la interfaz completa al constructor de la clase Therad para operar. thread

La sincronización de subprocesos es un problema al que se debe prestar atención al procesar subprocesos. Sincronización El método debe modificarse con la clase de palabra clave sincronizada Después de ser modificado por esta palabra clave, cuando un subproceso A usa este método. Otros subprocesos que quieran utilizar este método deben esperar hasta que el subproceso A haya terminado de usar el método antes de usarlo. A continuación escribiré un ejemplo para ilustrar la sincronización de subprocesos. Este ejemplo tiene dos subprocesos, contabilidad y cajero. Ambos pueden usar métodos de acceso para acceder al libro mayor. Cuando el contador usa el método de acceso, escribe el registro de depósito de dinero y el cajero escribe el registro de retiro de dinero. Por lo tanto, cuando el contador usa el libro mayor, el cajero es. prohibido usarlo, y viceversa, es decir, una persona usa la otra y debe esperar. A continuación implemento esto a través de un pequeño programa Applet:

Importar Java applet *; Evento Java awt *;

clase pública MyThread extiende Applet implementa Runnable { int money = ; TextArea text = null; TextArea thread = null; Kuaiji = nuevo hilo (este); Chuna = nuevo hilo (este); texto = nuevo área de texto (); texto = nuevo área de texto (); agregar (texto); ); Chuna start(); } public sincronizado void Cunqu(int número) { if (Thread currentThread() == Kuaiji) { for(int i= ;i<= ;i++) Thread sleep( );}    catch(Exception e); ){}   text append( \n +dinero);    }  }   else if(Thread currentThread() == Chuna)  {  for(int i= ;i<= ;i++)  {   dinero = número de dinero/ ; );} catch(Exception e){} text append( \n +money); public void run() { if(Thread currentThread()==Kuaiji || currentThread()==Chuna) {for(int i=; yo<= ;yo++

)  {   Cunqu( );    }   }  }  } lishixinzhi/Article/program/Java/gj/201311/27739