Un ejecutivo cíclico proporciona una alternativa a escribir un sistema operativo en toda regla , en tiempo real. Consiste en un bucle infinito que contiene conjuntos de acciones . Cada conjunto está precedido por un período de espera que controla cuando el conjunto es para llevar a cabo sus acciones . El siguiente código muestra un ejemplo : while ( true) { //espera 3 secondswait ( 3000) ;//recepción de un mensaje de red ....... //esperar 2 segundos para que la recepción completa de la messagewait ( 2000 ) ;//escanear el contenido del mensaje ....... } Estos conjuntos de acciones a menudo se pueden ejecutar simultáneamente con algún grado de sincronización. En Java, las discusiones son un mecanismo para ejecutar tareas simultáneas utilizando pausas para ayudar en la sincronización. Instrucciones
identificar las tareas
1 Seleccione un patrón de diseño que más se acerque a los requisitos de comportamiento de la aplicación que se construirá como un ejecutivo cíclico. Asegúrese de que el patrón de diseño cubre el contenido del bucle que forman el ejecutivo cíclico.
2
Par los comportamientos del patrón de diseño con los requisitos de la aplicación . Asegúrese de que cada uno de los procesos cooperativos , sincronizados se asocia con cada uno de los comportamientos descritos en la solicitud.
3
Identificar los detalles específicos de Java que componen cada una de las clases de hilo de proceso de la aplicación . Asegúrese de establecer una pausa de sincronización para cada clase Thread proceso para asegurar el tiempo adecuado entre los procesos y evitar condiciones anómalas como las carreras . Crear clases de apoyo para actuar como amortiguadores de intercambio de datos entre procesos , tales como colas , según sea necesario . Crear una clase de secuencia de registro para definir registros de seguimiento de la ejecución de cada hilo de proceso.
Organizar el paquete
4
Construir un ejecutivo de clase principal cíclica que crea instancias de la clase Thread proceso , clases especiales de apoyo y cualquier otra inicialización requerida , tales como las siguientes :
clase
CyclicExec { void (String [] args ) public static {//inicializar necesitan recursos .......... ........................... //define un registro hilo classLogStream ls = new LogStream (); ......... ............................ //inicializar las clases de apoyo ................. .................... MsgQueue sq = new MsgQueue (.... ) ; .................. ................... //inicializa las clases de hilo de proceso ......................... ............ //instancia del proceso Process_1 y definir su asociado threadProcess_1 p1 = new Process_1 ( ......) ; T_Process_1 = new thread ;/( p1 ) /activar el tema por Process_1try { T_Process_1.start (); } catch ( IllegalThreadStateException e) { //Entrar un mal comienzo de la rosca y salida .......................... ........... } } }
5
Agregar al paquete de cada una de las clases de hilo de proceso, como muestra el siguiente ejemplo :
clase
Process_1 extiende thread {//initializationpublic Process_1 (.... ) {//establecer un registro de este hilo ( P_S es objeto de secuencia de registro predefinido ) PrintStream p1_s = p_s.make_it ( Processs_1_Log_File ) ;//inicializar el subproceso de proceso .. ................................... } .............. ....................... //ejecución - impulsado por el método start () implícito utilizado en el vacío classpublic principal run () {//core loopwhile ( true) {//proceso básico ..................................... //pausa después de ejecutar una ciclo del processtry core { sleep ( Process_1_Wait ) ; } catch ( InterruptedException e) { //iniciar una excepción pausa .......................... ............. } } } }
6
construir las clases de apoyo que definen buffers de mensajes entre hilos de proceso con sus métodos de acceso de amortiguamiento calificados como sincronizada , ya que la siguiente muestra en el ejemplo : public
sincronizado Pushit byte (byte ITM) { ................................ ............................. }
7
Crear una clase especial que define los archivos de registro de rastreo el comportamiento de las clases de hilo de proceso, tales como :
clase
LogStream { private boolean LogState ;//clase initializerpublic LogStream (String LogStateIn ) { this.LogState = false; if ( LogStateIn.equals ("sí" ) ) this.LogState = true ;} //crear una secuencia de registro a un filepublic PrintStream make_it (String LogLocation ) { PrintStream this1 ; cadena decisión2 ; if ( this.LogState ) { decisión2 = new String ( LogLocation ) ;} else { decisión2 = new String (" /dev /null ") ;} try { this1 = new PrintStream ( nueva FileOutputStream ( decisión2, true) ) ; } catch ( Exception e ) { this1 = null; } return this1 ;} }
probar y entregar
8
Definir una serie de escenarios de prueba para cubrir las condiciones de operación tanto extremas y normal con el fin de afinar la sincronización entre los subprocesos del proceso .
9
opinión el hilo proceso sesión para asegurarse de que las clases de hilo de proceso funcionan como se esperaba. Asegúrese de que no hubo carreras o condiciones similares.
10
Preparar el paquete de distribución de aplicaciones mediante la inclusión de los archivos de clase ( ejecutable) para cada uno de los hilos de proceso , la clase principal , clases de apoyo de mensajería y secuencia de registro clase. Incluir scripts que descargar y configurar los archivos de clase , así como inicializar el directorio donde los archivos de registro de hilo de proceso se ubicarán .