API Orientada a Objetos de Java - Wiki LES PUC-Rio

Propaganda
Threads e IO
Sérgio Luiz Ruivace Cerqueira
[email protected]
Roteiro
• Processos X Threads
• Ciclo de vida de uma Thread
• Criação de uma Threads
• Utilização de Threads
• Sincronização de Threads
© LES/PUC-Rio
Processos X Threads
•
Processos
– CPU virtual única e física compartilhada
– Escalonador seleciona o processo a ser executado pelo CPU
– Pode-se suspende-lo e reiniciá-lo a partir do mesmo ponto
•
Threads (lightweight process )
– Análoga ao processo
– Uma thread é considerada leve pelo fato de rodar dentro do contexto do
processo,
– Compartilha os recursos alocados para o ambiente do programa
Itens compartilhados
© LES/PUC-Rio
Estados
© LES/PUC-Rio
Criação de uma Threads
• Existem duas estratégias básicas para usar Threads para
criar uma aplicação concorrente:
– Estendendo a classe Thread
– Implementando a interface Runnable
© LES/PUC-Rio
Utilização de Threads
• Considerações de Design
• Usar a implementação do Runnable, dá maior flexibilidade
de Design, pois permite que a classe que implementou a
interface java.lang.Runnable estenda o comportamento de
outra classe.
• Estender diretamente a classe Thread, facilita o acesso aos
métodos da classe java.lang.Thread, mas dificulta a
modelagem da POO, pois impede que a sub-classe de
Thread estenda outra classe.
© LES/PUC-Rio
Sincronização de Threads
• Como as threads compartilham dados somos obrigados a
nos preocupar com o que as outras threads estão fazendo
em um ambiente multithreads
• Existem várias formas de assegurar que o dados acessado
pela thread seja sincronizado
– Locking
– NotifyAll e wait
– Lock explícito e variáveis condicionais
© LES/PUC-Rio
Exemplo de lock reentrant
• Saída
© LES/PUC-Rio
Garbage Collector
• Nativo, variando de JVM para JVM
– Algumas JVMs pagas oferecem serviço de limpeza de memória
para poupar processamento e outros benefícios.
• Quando ele roda
– A JVM não o obriga a rodar, mas pode-se pedir não significa
que ele vá rodar :
– Ciclo de vida do objeto
© LES/PUC-Rio
Garbage Collector
• Quando o garbage collector destrói objetos:
– Quando estes não estão sendo referenciados por nenhuma
variável.
© LES/PUC-Rio
I/O
I/O
• Java tem uma API extensa de manipulação de I/O
• Permitindo a utilização da Console do SO e Arquivo
• É possível ler e escrever em arquivo
– Texto: FileWriter
– Objeto: ObjectOutputStream
– Etc...
© LES/PUC-Rio
Abrir
File dir = new File("c:\\");
if (dir != null) {
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
System.out.println(files[i] + " => dir");
}
else {
System.out.println(files[i] + " => file");
}
}
}
• Com a classe File é possível abrir o arquivo/diretório
– Tendo acesso a lista de arquivo/diretório
• Deve ser passado o endereço relativo ou absoluto do
arquivo/diretório
© LES/PUC-Rio
Leitura
BufferedReader inputStream = null;
try {
inputStream = new BufferedReader(new FileReader("c:\\teste.txt"));
String line;
while ((line = inputStream.readLine()) != null) {
System.out.println(line);
}
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
catch (Exeption e)
{
System.out.println(e.getMessage());
}
}
}
• Com o BufferedReader é possível realizar a leitura do
arquivo linha por linha
• Ao trabalhar com leitura de arquivo é importante fechar o
arquivo após a sua utilização
© LES/PUC-Rio
Escrita
PrintWriter outputStream = null;
try {
outputStream = new PrintWriter(new FileWriter("c:\\teste.txt"));
outputStream.println(“Linha de Teste");
} finally {
if (outputStream != null) {
outputStream.close();
}
}
• Com o PrintWriter é possível realizar a escrita de uma linha
de String
• Da mesma forma que na leitura de arquivo é importante
fechar o arquivo após a sua utilização
© LES/PUC-Rio
Leitura do Teclado
Scanner scan
= null;
try {
scan
= new Scanner(System.in);
String linha
= scan.nextLine();
int int1
= scan.nextInt();
float float1
= scan.nextFloat();
} catch(Exception e) {
e.printStackTrace();
} finally {
if (scan != null)
scan.close();
}
• Com o Scanner é possível obter informações enviadas pelo
teclado
• Ele já converte o texto escrito pelo teclado em um tipo a
partir do método que você escolher
– nextInt: vai converter o texto para int
– nextDouble: vai converter o texto para double
© LES/PUC-Rio
Exercícios
• O objetivo dos exercícios é fixar os conceitos de:
– Ler um arquivo
– Escrever em um arquivo
– Ler do teclado
17
© LES/PUC-Rio
Fim
Download