– Threads (Linhas)

 

Threads e Threading no Java

 

                O que são Linhas? 

 

                Uma visão simplista de um computador é a que tem uma CPU que  manipula os dados, uma memória ROM que contém o programa que o CPU executa, e RAM que segura os dados nos quais o programa opera. Nesta visão simples, um trabalho é executado de cada vez.

 

Thread e thread para referenciar a  ideia de execução. 

 

                Três Partes de uma Linha 

 

                Uma linha inclui três partes principais. Primeiro, há o CPU virtual. Segundo, há o código que esta CPU está executando. Terceiro, há os dados no que o código trabalha. 

 

                Criando a Linha 

 

                Demos uma olhada no modo que uma linha é criada, e discuta como os argumentos de construção  são usados para prover o código e dados para a linha quando corre. 

 

                Começando a Linha 

 

                Embora nós criamos a linha, não começa correndo imediatamente. Para começar isto, nós usamos o método start ( ). Este método está na classe de Linha, tão determinado nosso esboço prévio que nós simplesmente dizemos. 

 

                Thread Sheduling 

 

                Embora a linha se torna runnable, necessariamente não começa imediatamente. Claramente em uma máquina que de fato tem só uma CPU, pode estar fazendo só uma coisa de cada vez. 

 

                Testando uma Linha 

 

                Às vezes é possível para uma linha estar em um estado desconhecido. É possível inquirir se uma linha ainda é viável através do método  isAlive ( ). 

 

                Pondo Linhas  em Cabo  (Putting Threads on Hold)

 

                Vários mecanismos existem que podem parar a execução de uma linha temporariamente. Seguindo este tipo de suspensão, execução pode ser retomada como se nada tivesse interrompido sua execução, a linha aparece ter executado uma instrução muito lentamente simplesmente. 

                O método sleep foi introduzido na primeira seção e foi usado para deter uma linha para um período de tempo. 

                Às vezes é apropriado suspender execução de uma linha indefinidamente em qual caso alguma outra linha será responsável para retomar a execução. Um par de métodos de Linha está disponível para isto. Eles são chamados suspend () e resume (). 

                O método join ( ) causa a linha atual para esperar até a linha em qual o método join é chamado termina. 

 

                Outros modos para criar linhas 

 

                Nós discutimos criando Linha por uso de uma classe separada que implementa Runnable. De fato, esta não é a única possível aproximação. 

 

Usando sincronizaram em Java 

 

                O Problema 

                 

                Imagine uma classe que representa uma pilha. Advertência que a classe não faz nenhum esforço para dirigir transbordamento ou underflow da pilha, e que a capacidade de pilha está bastante limitada. Estes aspectos não são pertinentes a nossa discussão. 

 

                A Bandeira de Fechadura de Objeto  (The Object Lock Flag)

 

                Em Java, toda instância de qualquer objeto tem um flag (bandeira) associado com isto. Esta bandeira pode ser pensada de como uma " bandeira " de fechadura. Um palavra sincronizado é provido para permitir interação com esta bandeira.

 

                Reunindo isto 

 

                Como foi sugerido, o mecanismo sincronizador () só trabalha se o programador põe as chamadas nos lugares corretos.

 

                Paralisação completa 

 

                Em programas onde linhas múltiplas estão competindo para acesso a recursos múltiplos, pode haver uma possibilidade de uma condição conhecida como paralisação completa. Isto acontece quando uma linha está esperando por uma fechadura segurada por outra linha, mas a outra linha já está esperando por uma fechadura segurada pela primeira linha. 

 

 


Enfie Interação  (Thread Interaction)

 

                O Problema 

 

                Por que duas linhas poderiam precisar interagir?          

 

                A Solução 

 

                Toda instância de objeto em Java tem duas tranças de linha associadas com isto. O primeiro é usado por linhas que querem obter a bandeira de fechadura, e foi discutido na seção. A segunda trança é usada para implementar os mecanismos de comunicação de wait () e notify (). 

 

 


Exercícios

 

Exercício 01

 

class Prog1 extends Thread

      { int a = 0;

        public void run(){

         for(int r=0;r<7;r++)

         { a = a+1; System.out.println(getName()+"    "+a);}

        }

      }

         

class Prog2 extends Thread

      { int b = 0;

        public void run(){

         for(int r=0;r<7;r++)

         { b = b+1; System.out.println(getName()+"    "+b);}

        }

      }

 

class Prog1301 { public static void main(String arg[])

             {

               Prog1 x = new Prog1();

               Prog2 y = new Prog2();

               x.setName("Paulo");

               y.setName("Mario");

               x.start(); y.start();

               for (int i =0; i<3; i++)

               System.out.println("executando o Main");

               /*try{x.join(); y.join();} catch(InterruptedException e){} */

               }

             }

 

 

Exercício 02

 

class Prog3 extends Thread {

             public void run()

             { int a = 0;

               for(int r=0;r<7;r++)

               { a = a+1;

                 System.out.println(getName()+"     "+ a);

               }

             }

           }

 

  class Prog1302 { public static void main(String arg[])

               { Prog3 x = new Prog3();

                 Prog3 y = new Prog3();

                 x.setName("Paulo");

                 y.setName("Mario");

                 x.start();

                 y.start();

                 try{ x.join(); y.join();} catch(InterruptedException e){}

                }

               }

 

 


Capítulo 14 – Java com Rede

 

Rede com Java 

 

                Sockets 

 

                Sockets é o nome de um modelo de programação particular, para o vínculo de comunicação entre processos. Por causa da popularidade deste modelo de programa, o nome socket foi usada de novo em outras áreas inclusive Java. 

 

                Montando a Conexão 

 

                Para montar a conexão, uma máquina tem que estar correndo um programa que está esperando por uma conexão, e o outro fim tem que tentar alcançar o primeiro. Isto é semelhante a um sistema de telefone; uma festa tem que fazer a ligação de fato, enquanto a outra festa tem que estar esperando pelo telefone quando aquela ligação é feita. 

 

                Enviando a Conexão 

 

                Quando fazemos um telefone chamar, nos precisamos saber o número de telefone para discar. Quando fazemos uma conexão de cadeia, nos precisamos saber o endereço ou o nome da máquina distante. 

 

                Números de porto 

 

                Números de porto em sistemas de TCP/IP são 16 números de pedaço e estão no alcance 0-65535. Em prática, número de porto debaixo de 1024 é reservado para serviços predefinidos, e você não os deveria usar a menos que você deseje comunicar com um desses serviços. 

 

                O Modelo de Rede no Java 

 

                No idioma de Java, são implementadas conexões TCP/IP com classes no java.pacote líquido.  

 

                Sockets de UDP 

 

                Onde TCP/IP é um protocolo conexão-orientado, o Usuário Protocolo de Datagram é um  protocolo de "connectionless ". Contudo, um modo simples e elegante para pensar nas diferenças entre estes dois protocolos é a diferença entre o telefone chamada e correio postal. 

 

                DatagramPacket 

 

                DatagramPacket tem dois constructors: um para dados receptores e o outro por enviar dados.

 

Hosted by www.Geocities.ws

1