Um executivo cíclico fornece uma alternativa para escrever um sistema operacional completa, em tempo real. Ele consiste em um loop infinito que contém conjuntos de ações . Cada conjunto é precedida por um período de espera que controla quando o conjunto é a realização de suas ações. O código a seguir fornece um exemplo : while ( true) { //espera 3 secondswait (3000) ;//receber uma mensagem de rede ....... //esperar 2 segundos para a recepção completa da messagewait (2000 ) ;//verificar o conteúdo da mensagem ....... } Esses conjuntos de ações muitas vezes podem ser executados simultaneamente com algum grau de sincronização. Em Java, threads são um mecanismo para a execução de tarefas simultâneas usando pausas para ajudar na sincronização. Instruções
identificar tarefas
1
Selecione um padrão de projeto que está mais próximo dos requisitos de comportamento do aplicativo a ser construído como um executivo cíclica. Certifique-se que o padrão de projeto abrange o conteúdo do loop que compõem o executivo cíclico .
2
emparelhar os comportamentos do padrão de projeto com os requisitos da aplicação . Certifique-se de que cada um dos processos cooperantes , sincronizadas está associada a cada um dos comportamentos descritos no pedido .
3
Identificar os detalhes específicos em Java que compõem cada uma das classes de Tópicos processo da aplicação. Certifique-se de criar uma pausa de sincronização para cada classe de processo de linha para garantir tempo adequado entre os processos e evitar condições anômalas , como corridas . Criar classes de suporte para atuar como buffers de troca de dados entre os processos , como filas , conforme necessário. Crie uma classe de fluxo de log para definir logs de rastreamento a execução de cada segmento do processo .
Organize o pacote
4
Construa uma classe principal executivo cíclico que instancia as classes segmento do processo , aulas especiais de apoio e qualquer outra inicialização necessárias, tais como o seguinte :
classe CyclicExec { void main ( string [ ] args ) public static {//inicializa recursos necessários .......... ........................... //define um segmento classLogStream log ls = new LogStream (); ......... ............................ //inicializa classes de suporte ................. .................... MsgQueue sq = new MsgQueue (....) ; .................. ................... //inicializa aulas segmento do processo ......................... ............ //instanciar o processo Process_1 e definir a sua associada threadProcess_1 p1 = new Process_1 ( ......) ; T_Process_1 = new thread ( p1 ) ;//activar o fio para Process_1try { T_Process_1.start ();} catch ( IllegalThreadStateException e) { //log de um início ruim fio e saída .......................... ........... }}}
5
Adicione ao pacote de cada uma das classes de Tópicos de processo, como mostra o seguinte exemplo :
classe Process_1 estende Tópico {//initializationpublic Process_1 (.... ) {//criar um log para este thread ( P_S é pré- definido log objeto de fluxo ) PrintStream p1_s = p_s.make_it ( Processs_1_Log_File ) ;//inicializa o segmento do processo .. ................................... } .............. ....................... //execução - solicitado pelo início implícito () método usado na principal void run classpublic () {//core loopwhile ( true) processo {//core ..................................... //pausa após a execução de um ciclo do processtry núcleo { sleep ( Process_1_Wait );} catch ( InterruptedException e) { //log uma exceção pausa .......................... ............. }}}}
6
Construir as classes de suporte que definem buffers de mensagens entre threads de processo com os seus métodos de acesso tampão qualificados como sincronizados, como o seguinte exemplo mostra :
byte sincronizado público PushIt (byte ITM) { ................................ ............................. }
7
Construa uma classe especial que define os arquivos de log de rastreamento o comportamento das classes segmento do processo , tais como :
classe LogStream { LogState ;//classe LogStream initializerpublic private boolean (String LogStateIn ) { this.LogState = false ; if ( LogStateIn.equals ("Sim" ) ) this.LogState = true; } //criar um fluxo de log para um filepublic PrintStream make_it (String LogLocation ) { PrintStream this1 ; Cordas este aspecto 2 ; if ( this.LogState ) { este aspecto 2 = new string ( LogLocation );} else { este aspecto 2 = new string (" /dev /null ");} try { this1 = new PrintStream (new FileOutputStream ( este aspecto 2 , true) );} catch (Exception e) { this1 = null ;} retornar this1 ;}}
Test and Deliver
8
Definir uma sequência de cenários de teste para cobrir tanto extrema e condições normais de operação , a fim de aperfeiçoar a sincronização entre os threads do processo .
9
Reveja os registos de rosca processo para certificar-se que as classes de Tópicos processos operados como esperado. Certifique-se de que nenhuma corrida ou condições semelhantes ocorreram .
10
Prepare o pacote de entrega de aplicativos , incluindo a classe ( executável) arquivos para cada um dos tópicos do processo, a classe principal , mensagens de aulas de apoio e log fluxo classe. Incluir os scripts que descarregam e configurar os arquivos de classe , bem como inicializar o diretório onde os arquivos de log de rosca processo devem ser localizados.