Está en la página 1de 32

HILOS Threads

Hilos

 JVM, sistema multihilo


 Gestiona detalles asignando tiempos
Hilo 1
 Flujo de control de programa
Hilo 2
Hilo 3
 Ejemplo:
 hilo 1 comunicación con el usuario
 hilo 2: Transferencia de archivos
Ejemplo: Hilo que cuenta de 1 hasta 10
La interfaz Runnable
Ciclo de vida de un thread

running

start

New Thread Runnable No Runnable

El método run termina

Dead
Priorización
 Java soporta un mecanismo simple denominado
planificación por prioridad fija (fixed priority
scheduling).

 Esto significa que la planificación de los hilos se realiza


con base en la prioridad relativa de un hilo frente a las
prioridades de otros.
Priorización Ejemplo

Clicker
Priorización Ejemplo

HiloPri
Sincronización
 Ejemplo: productor y consumidor
Dos procesos

Hilo 1 Hilo 2

Produce información
Productor Consumidor
Sincronización Ejemplo

Productor
Sincronización Ejemplo

Consumidor
Contenedor

No sincronizado!!!
Sincronización Ejemplo

Contenedor

Sincronizado 
Sincronización Ejemplo

Contenedor
Sincronización Ejemplo

ProductorConsumidorTest
Flujos
 Los programas en java realizan las operaciones de entrada / salida a
través de flujos.
 Para gestionar teclado, pantalla, impresora, conexión a red un buffer
en memoria o un archivo en disco.
Object

OutputStream InputStream

Reader Writer

RandomAccessFile
Flujos - InputStream
Clase Función Parámetros del constructor

ByteArrayInputStream Permite usar un espacio de El intermedio del que extraer los bytes.
almacenamiento intermedio de Espacio de almacenamiento.
memoria como un InputStream
Como una fuente de datos. Se conecta al
objeto FilterInputStream para proporcionar
un interfaz útil.

StringBufferInputStream Convierte un String en un Un String la implementación subyacente


InputStream usa, de hecho, un StringBuffer
Como una fuente de datos. Se conecta al
objeto FilterInputStream para proporcionar
una interfaz útil.

File-InputStream Para leer información de un archivo Un String que represente al nombre del
archivo o un objeto File o FileDescriptor.
Como una fuente de datos. Se conecta al
objeto FilterInputStream para proporcionar
una interfaz útil.
Flujos - InputStream

Clase Funcion Parametros del


constructor
Piped-InputSteam Produce los datos que se están Como una fuente de datos.
escribiendo en el PipedOutputStream Se conecta al objeto FilterInputStream
asociado. Implementa el concepto para proporcionar una interfaz útil.
de entubar.

Sequence-InputStream Convierte dos o mas objetos Dos objetos InputStream o una Enumeratio
InputStream en un InputStream para contener objetos inputStream.
único. Como una fuente de datos,
Se conecta al objeto FilterInputStream
para proporcionar una interfaz útil.

Filter-InputStream Clase abastracta que es una interfaz


para los decoradores que
proporcionan funcionalidad útil a
otras clases InputStream.
Flujos - OutputStream

Clase Función Parámetros del


constructor
ByteArrayOutputStrea Crea un espacio de Tamaño opcional inicial del espacio de
m almacenamiento intermedio en almacenamiento intermedio.
memoria. Para designar el destino de los datos
Todos los datos se envían al conectarlo a un objeto
flujo se ubican en este espacio FilterOutputStream para proporcionar
de almacenamiento intermedio. una interfaz útil.
FileOutputStream Para enviar información a un Un String que representa el nombre de
archivo archivo, o un objeto File o un objeto
FileDrescriptor.
Para designar el destino de los datos
conectarlo a un objeto
FilterOutputStream para proporcionar
una interfaz útil
Flujos - OutputStream

Clase Función Parámetros del


constructor
PipedOutputStream Cualquier información que se Para designar el destino de los datos
desee escribir aquí acaba para multihilo. conectarlo a un objeto
automáticamente como entrada FilterOutputStream para proporcionar una
del PipedInpuStream asociado. interfaz útil.
Implementa el concepto de
“entubar”
FilterOutputStream Clase abstracta que es una
interfaz para los decoradores que
proporcionan funcionalidad útil a
las otras clases OutputStram
Serialización
 La serialización de objetos de Java permite tomar
cualquier objeto que implemente la interfaz
Serializable y convertirlo en una secuencia de bits que
puede ser posteriormente restaurada para regenerar el
objeto original.
 Ejemplo: se puede crear un objeto en una máquina
Windows, serializarlo, y enviarlo a través de la red a
una máquina Unix, donde será reconstruido
correctamente.
Serialización
 Forma de serializar un objeto:

 Para serializar un objeto, se crea algún tipo de objeto OutputStream y se


envuelve en un ObjectOutputStream. En este momento sólo hay que invocar
a writeObject( ) y el objeto se serializa y se envía al OutputStream.

 Para invertir este proceso, se envuelve un InputStream en un


ObjectInputStream y se invoca a readObject( ). Lo que vuelve, como
siempre, es una referencia a un Object, así que hay que hacer una conversión
hacia abajo para dejar todo como se debe.
Ejemplo 1 - Lectura de archivos de
texto
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestFile01 {
public static void main(String[] args) {
String nombreArchivo = Teclado.readLine("Nombre de archivo : ");
FileReader fr = null;
try {
fr = new FileReader(nombreArchivo);
}catch(FileNotFoundException x) {
System.err.println("Error: archivo no existe");
System.err.println(x.getMessage());
System.exit(0);
}//catch
Ejemplo 1 - Lectura de archivos de
texto
BufferedReader in = new BufferedReader(fr);
while(true) {
try {
String linea = in.readLine();

if(linea==null) break;
System.out.println(linea);
}//try
catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
System.exit(0);
}//catch
}//while
}//main
}//TestFile01
Ejemplo 2 - Lectura y copiado de
archivos de texto
import java.io.*;
public class TestFile02 {
public static void main(String[] args) {
String nombreOrigen = Teclado.readLine("Nombre de archivo origen : ");
String nombreDestino = Teclado.readLine("Nombre de archivo destino: ");
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader(nombreOrigen);
fw = new FileWriter(nombreDestino);
}catch(FileNotFoundException x) {
System.err.println("Error: archivo no existe");
System.err.println(x.getMessage());
System.exit(0);
}//catch
catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
System.exit(0);
}//catch
Ejemplo 2 - Lectura y copiado de
archivos de texto
BufferedReader in = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw);
while(true) {
try {
String linea = in.readLine();
if(linea==null) break;
out.println(linea);
}//try
catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
System.exit(0);
}//catch
}//while
out.flush();
out.close();
}//main
}//TestFile02
Ejemplo 3 - Lectura y copiado de
archivos binarios
import java.io.*;
public class TestFile03 {
public static void main(String[] args) {
String nombreOrigen = Teclado.readLine("Nombre de archivo origen : ");
String nombreDestino = Teclado.readLine("Nombre de archivo destino: ");
FileInputStream fr = null;
FileOutputStream fw = null;
try {
fr = new FileInputStream(nombreOrigen);
fw = new FileOutputStream(nombreDestino);
}catch(FileNotFoundException x) {
System.err.println("Error: archivo no existe");
System.err.println(x.getMessage());
System.exit(0);
}//catch
catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
System.exit(0);
}//catch
Ejemplo 3 - Lectura y copiado de
archivos binarios
BufferedInputStream in = new BufferedInputStream(fr);
BufferedOutputStream out = new BufferedOutputStream(fw);
byte[] arr = new byte[2048]; // Tamaño del buffer asumido
try {
while(true) {
int tamaño = in.read(arr,0,arr.length);
if(tamaño==-1) break;
out.write(arr,0,tamaño);
}
out.flush();
out.close();
}catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
System.exit(0);
}//catch
}//main
}//TestFile03
Ejemplo 4 - Lectura de un archivo de la
red y copiado en el equipo local
import java.io.*;
import java.net.*;
public class TestFile04 {
public static void main(String[] args) {
String nombreOrigen = Teclado.readLine(“url: ");
String nombreDestino = Teclado.readLine("Nombre de archivo destino: ");
URL fr = null;
FileOutputStream fw = null;
try {
fr = new URL(nombreOrigen);
fw = new FileOutputStream(nombreDestino);
}catch(FileNotFoundException x) {
System.err.println("Error: archivo no existe");
System.err.println(x.getMessage());
System.exit(0);
}//catch
catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
System.exit(0);
}//catch
Ejemplo 4 - Lectura de un archivo de la
red y copiado en el equipo local
try {
BufferedInputStream in = new BufferedInputStream(fr.openStream());
BufferedOutputStream out = new BufferedOutputStream(fw);
byte[] arr = new byte[2048]; // Tamaño del buffer asumido

while(true) {
int tamaño = in.read(arr,0,arr.length);
if(tamaño==-1) break;
out.write(arr,0,tamaño);
}//while
out.flush();
out.close();
}//try
catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
System.exit(0);
}//catch
}//main
}//TestFile04
Ejemplo 5 - Lectura y escritura de
objetos como Objects
import java.io.*;
public class TestFile07 {
public static void main(String[] args) {
Rectangulo[] r = new Rectangulo[2];
r[0] = new Rectangulo(10,20);
r[1] = new Rectangulo(5,30);

String nombreArchivo = Teclado.readLine("Nombre de archivo de salida: ");


try {
ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream(nombreArchivo));
for(Rectangulo rect: r) {
out.writeObject(rect);
}//for
out.close();
}catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
}//catch
Ejemplo 5 - Lectura y escritura de
objetos como Objects
try {
ObjectInputStream in = new ObjectInputStream(new
FileInputStream(nombreArchivo));
while(true) {
Rectangulo rr = (Rectangulo) in.readObject();
System.out.println(rr);
}//while
}catch(IOException x) {
System.err.println("Error de IO: " + x.getMessage());
}//catch
catch(ClassNotFoundException x) {
System.err.println("Error de clase: " + x.getMessage());
}//catch
}//main
}//TestFile07

También podría gustarte