SlideShare una empresa de Scribd logo
1 de 22
Programación
Orientada a Objetos
Tema: 3 Contenedores
Docente: Mg. Luis Fernando Aguas B
Las convicciones tienen el poder de crear y el poder
de destruir
Objetivo
1. Adquirir los conceptos
básicos relacionados con
la POO
2. Reconocer las
características de la POO
● 3.2 Contenedores Especiales
Contenido
Objetivos de Desarrollo Sostenible
3.2 Contenedores Especiales
Paquetes
 Clases de java se pueden agrupar en paquetes.
 Nombres de paquetes separados por . Como
 java.io.* // clases de E/S y archivos
 java.util.* // contenedores, date/time,
 java.lang.* //clases básicas de java, importadas
automáticamente
• Math, Integer, Double, System, Thread, String, etc
 javax.swing.* // clases soporte gráfico
 java.net.* // clases soporte comm en red, sockets, URLs
 Para garantizar nombres de paquetes únicos Sun recomienda dar
nombres en sentido inverso a dominios en urls
 Los archivos de paquetes creados deben seguir jerarquía de
directorios dados en secuencia dada en nombre paquete
 cl.udec.inf.sc.pedro : Clases definidas en pedro debe estar en
directorio cl/udec/inf/sc/pedro
Importando paquetes
 Para importar paquetes de clases ya definidos usar import
 Ejemplos
 import java.util.* // incluye un conjunto de contenedores
definidos en java como ArrayLists, Vectors, HashMaps,
Lists, etc
 import java.io.* // incluye clases de clases para
entrada/salida
 import java.lang.* // import no necesario
 Si nombre de clase en un paquete es igual a otra en otro
paquete y ambos son importados, de debe usar el nombre
de paquete con clase. Ejemplo
 java.util.Date y java.sql.Date
Creando paquetes
 Para poner una clase en un paquete se agrega
la sentencia de package nombre paquete
package cl.udec.inf.pedro;
public class Cuenta{
…
}
 Cuando la sentencia package no se agrega la
clase pertenece al paquete por defecto
Implementaciones de Colecciones
en Java
 ArrayList implementa List (usando arreglos)
 LinkedList implementa List (usando listas
enlazadas)
 HashSet implementa Set (usando tablas hash)
 TreeSet implementa Set (usando árboles)
 HashMap implementa Map (usando tablas
hash)
 TreeMap implementa Map (usando árboles)
Arrays, ArrayLists, Vectors
 Arrays pueden contener datos primitivos u objetos mientras que ArrayLists
sólo objetos
 Arrays son de tamaño fijo, mientras que ArrayLists crecen dinámicamente
 ArrayLists en Java 6.0
• Como templates en C++
• Tipo de objeto especificado en momento de creación de ArrayList
• ArrayList<String> vec1 = new ArrayList<String>();
• ArrayList<String> vec2 = new ArrayList<String>(10);
• Algunos métodos comunes
• Add, remove, size, get, contains, indexOf, isEmpty, etc
 Ventaja de ArrayList
• No se necesita saber tamaño a priori
 Desventaja
• No se puede ocupar la notación [] para obtener elementos
 Vectors
 Similar a ArrayLists
• Métodos de acceso sincronizados, luego más lento
• Se puede usar notación [] directamente, además de una serie de otros métodos
 LinkedLists
 Lento acceso itemes individuales, rápido al agregar
Hebras y Sincronización
● Hebra
○ Una secuencia de sentencias de código
que puede estar en ejecución concurrente
con otras hebras
○ Para crear hebras en Java
■ Crear una clase que implementa la
■ Clase que implementa interface Runnable
● Class A implements Runnable
■ Clase derivada de clase Thread
● Class A extends Thread
Creando hebras
/** Opción 1 */
import java.lang.*;
public class A extends Thread
{
private: …
public A(){…}
public void run()
{
....
}
public static void main(String[] args){
A thread1 = new A();
thread1.start();
}
}
/** Opción 2 */
import java.lang.*;
public class B implements Runnable
{
private: …
public B(){…}
public void run()
{
....
}
public static void main(String[] args){
B b = new B();
Thread thread1 = new Thread(b);
thread1.start();
}
}
Otras operaciones sobre hebras
● join
○ Permite a una hebra esperar por la terminación de otra
● sleep
○ Una hebra puede dormir por un tiempo dado
■ Método estático
Manejando hebras en Java 6
● Soporte para aplicaciones concurrentes
○ Aplicación crea y maneja hebras
■ Mediante uso de clase Thread o interface Runnable
○ Pasar tareas concurrentes a clase Executor
■ API para crear y manejar hebras
■ Proporciona pool de hebras para aplicaciones de gran escala
Sincronización
 Sincronización
 Keyword synchronized para indicar, bloque o método sincronizado,
sólo una hebra puede ejecutarse dentro de bloque o método
sincronizado
 Paquete java.util.concurrent
 Operaciones atómicas: (concurrent.atomic)
• Acciones atómicas sobre variables volátiles
• Variable volatile utilizada para decir a compilador que variable puede
ser modificada por múltiples hebras y se necesita último valor
almacenado
 Estructuras de datos accesadas atomicamente
• Colas, listas, tablas hash, etc.
 Locks
• Hasta java 1.4 cada objeto tiene un lock asociado
• Desde java 1.5 construcciones de locks para locks, LectoresEscritores y
locks reentrantes
 Semáforos
• Desde java 1.5
• http://java.sun.com/javase/6/docs/api/
 Monitores
• Usar keyword synchronized para exclusión mutua en métodos
• Hasta java 1.4 sólo soportaba una variable de condición por objeto
• wait() y notifyAll() como acciones en variable de condición (En Java, única
por objeto)
• Monitor tipo Mesa luego, wait() debe ser encerrado en ciclo while()
Ejemplo Productor-Consumidor con
semáforos
import java.util.concurrent.Semaphore;
public class QueuePC {
private int size;
private Object[] queue;
private int inptr = 0;
private int outptr = 0;
private int count = 0;
private Semaphore vacios;
private Semaphore llenos;
private Semaphore mutex;
public QueuePC(Integer size) {
this.size = size.intValue();
queue = new Object[size];
vacios = new Semaphore(size, true);
llenos = new Semaphore(0, true);
mutex = new Semaphore(1, true);
}
Productor consumidor Semáforos
public void put(Object value) throws
InterruptedException {
vacios.acquireUninterruptibly();// WAIT()
mutex.acquireUninterruptibly();
queue[inptr] = value;
System.out.println("P : " + count);
inptr = (inptr + 1) % size;
count++;
mutex.release();// SIGNAL()
llenos.release();
}
Productor consumidor Semáforos
public Object get() throws InterruptedException {
Object value;
llenos.acquireUninterruptibly();
mutex.acquireUninterruptibly();
value = queue[outptr];
outptr = (outptr + 1) % size;
count--;
System.out.println("C : " + count);
mutex.release();
vacios.release();
return value;
}
Productor consumidor Semáforos
public class Producer extends Thread {
private QueuePC buf;
private int id;
private static int number=0;
public Producer(QueuePC buf, Integer id) {
this.buf = buf;
this.id = id.intValue();
this.setName(new String(id.toString()));
}
public void run() {
for (int i = 1; i <= 50; i++) {
try {
System.out.println("Produciendo item : " + i);
buf.put(new Integer(number++));
} catch (InterruptedException e) {
System.out.println("Error al producir : " +
e.getMessage());
}
}
}
}
Productor consumidor Semáforos
public class Consumer extends Thread {
private QueuePC buf;
private int id;
public Consumer(QueuePC buf, Integer id) {
this.buf = buf;
this.id = id.intValue();
this.setName(new String(id.toString()));
}
public void run() {
for (int i = 1; i <= 50; i++) {
try {
Object j = buf.get();
System.out.println("tConsumiendo : " +
j.toString());
} catch (InterruptedException e) {
System.out.println("Error al consumir : " +
e.getMessage());
}
}
}
}
Productor consumidor Semáforos
import java.util.*;
/** Clase que define test de prueba para Problema
ProductorConsumidor usando semaforos */
public class TestSemPC {
public static void main(String[] args){
QueuePC queue = new QueuePC(new Integer(1));
Producer prod1 = new Producer(queue, new Integer(1));
Consumer cons1 = new Consumer(queue, new Integer(1));
Producer prod2 = new Producer(queue, new Integer(2));
Consumer cons2 = new Consumer(queue, new Integer(2));
Producer prod3 = new Producer(queue, new Integer(3));
prod1.start();
prod2.start();
prod3.start();
cons1.start();
cons2.start();
}
}
Gracias
Responsabilidad con pensamiento positivo

Más contenido relacionado

La actualidad más candente (7)

Java ArrayList Iterator
Java ArrayList IteratorJava ArrayList Iterator
Java ArrayList Iterator
 
Nuevos Métodos en ES6
Nuevos Métodos en ES6Nuevos Métodos en ES6
Nuevos Métodos en ES6
 
Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threads
 
Grupo1
Grupo1Grupo1
Grupo1
 
Java HashMap
Java HashMapJava HashMap
Java HashMap
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api stream
 
Librerias java
Librerias javaLibrerias java
Librerias java
 

Similar a S6-Contenedores

OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
Oscar V
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
FordBull2er
 
Java struts2 - 03 componentes de la aplicacion
Java   struts2 - 03 componentes de la aplicacionJava   struts2 - 03 componentes de la aplicacion
Java struts2 - 03 componentes de la aplicacion
Jechu2013
 
IntroduccióN A Visual C
IntroduccióN A Visual CIntroduccióN A Visual C
IntroduccióN A Visual C
oswchavez
 
IntroduccióN A Visual C
IntroduccióN A  Visual  CIntroduccióN A  Visual  C
IntroduccióN A Visual C
oswchavez
 

Similar a S6-Contenedores (20)

OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
 
02 tda1 t2018
02 tda1 t201802 tda1 t2018
02 tda1 t2018
 
Informe Poo
Informe PooInforme Poo
Informe Poo
 
[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracion[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracion
 
4-Unidad 1. Paradigma de la Programación-Orientación a Objetos
4-Unidad 1. Paradigma de la Programación-Orientación a Objetos 4-Unidad 1. Paradigma de la Programación-Orientación a Objetos
4-Unidad 1. Paradigma de la Programación-Orientación a Objetos
 
7-Unidad 2. Elementos de una Clase
7-Unidad 2. Elementos de una Clase7-Unidad 2. Elementos de una Clase
7-Unidad 2. Elementos de una Clase
 
lenguajejava.pptx
lenguajejava.pptxlenguajejava.pptx
lenguajejava.pptx
 
Multitarea
MultitareaMultitarea
Multitarea
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Java struts2 - 03 componentes de la aplicacion
Java   struts2 - 03 componentes de la aplicacionJava   struts2 - 03 componentes de la aplicacion
Java struts2 - 03 componentes de la aplicacion
 
Introduccion java
Introduccion javaIntroduccion java
Introduccion java
 
IntroduccióN A Visual C
IntroduccióN A Visual CIntroduccióN A Visual C
IntroduccióN A Visual C
 
IntroduccióN A Visual C
IntroduccióN A  Visual  CIntroduccióN A  Visual  C
IntroduccióN A Visual C
 
Colecciones
ColeccionesColecciones
Colecciones
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
 
Javascript
JavascriptJavascript
Javascript
 
3- Clases y Objetos
3- Clases y Objetos3- Clases y Objetos
3- Clases y Objetos
 
Sintaxisenjava
Sintaxisenjava Sintaxisenjava
Sintaxisenjava
 
Unidad 2 Sintaxis en java
Unidad 2 Sintaxis en javaUnidad 2 Sintaxis en java
Unidad 2 Sintaxis en java
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
 

Más de Luis Fernando Aguas Bucheli (20)

EFC-ISW-Luis Fernando Aguas.pptx
EFC-ISW-Luis Fernando Aguas.pptxEFC-ISW-Luis Fernando Aguas.pptx
EFC-ISW-Luis Fernando Aguas.pptx
 
P-S2.pptx
P-S2.pptxP-S2.pptx
P-S2.pptx
 
EBTS-S1.pptx
EBTS-S1.pptxEBTS-S1.pptx
EBTS-S1.pptx
 
P-S3.pptx
P-S3.pptxP-S3.pptx
P-S3.pptx
 
EBTS-S4.pptx
EBTS-S4.pptxEBTS-S4.pptx
EBTS-S4.pptx
 
P-S4.pptx
P-S4.pptxP-S4.pptx
P-S4.pptx
 
P-S1.pptx
P-S1.pptxP-S1.pptx
P-S1.pptx
 
EBTS-S3.pptx
EBTS-S3.pptxEBTS-S3.pptx
EBTS-S3.pptx
 
EBTS-S2.pptx
EBTS-S2.pptxEBTS-S2.pptx
EBTS-S2.pptx
 
PDIDTI-S7.pptx
PDIDTI-S7.pptxPDIDTI-S7.pptx
PDIDTI-S7.pptx
 
PDIDTI-S4.pptx
PDIDTI-S4.pptxPDIDTI-S4.pptx
PDIDTI-S4.pptx
 
PDIDTI-S2.pptx
PDIDTI-S2.pptxPDIDTI-S2.pptx
PDIDTI-S2.pptx
 
PDIDTI-S1.pptx
PDIDTI-S1.pptxPDIDTI-S1.pptx
PDIDTI-S1.pptx
 
PDIDTI-S8.pptx
PDIDTI-S8.pptxPDIDTI-S8.pptx
PDIDTI-S8.pptx
 
PDIDTI-S6.pptx
PDIDTI-S6.pptxPDIDTI-S6.pptx
PDIDTI-S6.pptx
 
PDIDTI-S5.pptx
PDIDTI-S5.pptxPDIDTI-S5.pptx
PDIDTI-S5.pptx
 
PDIDTI-S3.pptx
PDIDTI-S3.pptxPDIDTI-S3.pptx
PDIDTI-S3.pptx
 
TIC-S4.pptx
TIC-S4.pptxTIC-S4.pptx
TIC-S4.pptx
 
TIC-S3.pptx
TIC-S3.pptxTIC-S3.pptx
TIC-S3.pptx
 
TIC-S2.pptx
TIC-S2.pptxTIC-S2.pptx
TIC-S2.pptx
 

Último

Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
andersonsubero28
 
S01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfS01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdf
SalomeRunco
 

Último (20)

ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdfTECNOLOGIA DE CONCRETO 2024 estudiante.pdf
TECNOLOGIA DE CONCRETO 2024 estudiante.pdf
 
Arquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheArquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo Limache
 
5. MATERIALES petreos para concreto.pdf.
5. MATERIALES petreos para concreto.pdf.5. MATERIALES petreos para concreto.pdf.
5. MATERIALES petreos para concreto.pdf.
 
metodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasmetodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantas
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfTrabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
 
docsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbanadocsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbana
 
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICO
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICOATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICO
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICO
 
dokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptxdokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptx
 
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptxEFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
 
680186431-3-Porcentaje-Presentacion-2022.pdf
680186431-3-Porcentaje-Presentacion-2022.pdf680186431-3-Porcentaje-Presentacion-2022.pdf
680186431-3-Porcentaje-Presentacion-2022.pdf
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
 
1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas
 
Cereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. CerealesCereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. Cereales
 
S01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfS01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdf
 
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
INTEGRATED PROJECT DELIVERY.pdf (ENTREGA INTEGRADA DE PROYECTOS)
 
Mecatronica Automotriz .pdf
Mecatronica Automotriz              .pdfMecatronica Automotriz              .pdf
Mecatronica Automotriz .pdf
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 

S6-Contenedores

  • 1. Programación Orientada a Objetos Tema: 3 Contenedores Docente: Mg. Luis Fernando Aguas B
  • 2. Las convicciones tienen el poder de crear y el poder de destruir
  • 3. Objetivo 1. Adquirir los conceptos básicos relacionados con la POO 2. Reconocer las características de la POO ● 3.2 Contenedores Especiales Contenido
  • 6. Paquetes  Clases de java se pueden agrupar en paquetes.  Nombres de paquetes separados por . Como  java.io.* // clases de E/S y archivos  java.util.* // contenedores, date/time,  java.lang.* //clases básicas de java, importadas automáticamente • Math, Integer, Double, System, Thread, String, etc  javax.swing.* // clases soporte gráfico  java.net.* // clases soporte comm en red, sockets, URLs  Para garantizar nombres de paquetes únicos Sun recomienda dar nombres en sentido inverso a dominios en urls  Los archivos de paquetes creados deben seguir jerarquía de directorios dados en secuencia dada en nombre paquete  cl.udec.inf.sc.pedro : Clases definidas en pedro debe estar en directorio cl/udec/inf/sc/pedro
  • 7. Importando paquetes  Para importar paquetes de clases ya definidos usar import  Ejemplos  import java.util.* // incluye un conjunto de contenedores definidos en java como ArrayLists, Vectors, HashMaps, Lists, etc  import java.io.* // incluye clases de clases para entrada/salida  import java.lang.* // import no necesario  Si nombre de clase en un paquete es igual a otra en otro paquete y ambos son importados, de debe usar el nombre de paquete con clase. Ejemplo  java.util.Date y java.sql.Date
  • 8. Creando paquetes  Para poner una clase en un paquete se agrega la sentencia de package nombre paquete package cl.udec.inf.pedro; public class Cuenta{ … }  Cuando la sentencia package no se agrega la clase pertenece al paquete por defecto
  • 9. Implementaciones de Colecciones en Java  ArrayList implementa List (usando arreglos)  LinkedList implementa List (usando listas enlazadas)  HashSet implementa Set (usando tablas hash)  TreeSet implementa Set (usando árboles)  HashMap implementa Map (usando tablas hash)  TreeMap implementa Map (usando árboles)
  • 10. Arrays, ArrayLists, Vectors  Arrays pueden contener datos primitivos u objetos mientras que ArrayLists sólo objetos  Arrays son de tamaño fijo, mientras que ArrayLists crecen dinámicamente  ArrayLists en Java 6.0 • Como templates en C++ • Tipo de objeto especificado en momento de creación de ArrayList • ArrayList<String> vec1 = new ArrayList<String>(); • ArrayList<String> vec2 = new ArrayList<String>(10); • Algunos métodos comunes • Add, remove, size, get, contains, indexOf, isEmpty, etc  Ventaja de ArrayList • No se necesita saber tamaño a priori  Desventaja • No se puede ocupar la notación [] para obtener elementos  Vectors  Similar a ArrayLists • Métodos de acceso sincronizados, luego más lento • Se puede usar notación [] directamente, además de una serie de otros métodos  LinkedLists  Lento acceso itemes individuales, rápido al agregar
  • 11. Hebras y Sincronización ● Hebra ○ Una secuencia de sentencias de código que puede estar en ejecución concurrente con otras hebras ○ Para crear hebras en Java ■ Crear una clase que implementa la ■ Clase que implementa interface Runnable ● Class A implements Runnable ■ Clase derivada de clase Thread ● Class A extends Thread
  • 12. Creando hebras /** Opción 1 */ import java.lang.*; public class A extends Thread { private: … public A(){…} public void run() { .... } public static void main(String[] args){ A thread1 = new A(); thread1.start(); } } /** Opción 2 */ import java.lang.*; public class B implements Runnable { private: … public B(){…} public void run() { .... } public static void main(String[] args){ B b = new B(); Thread thread1 = new Thread(b); thread1.start(); } }
  • 13. Otras operaciones sobre hebras ● join ○ Permite a una hebra esperar por la terminación de otra ● sleep ○ Una hebra puede dormir por un tiempo dado ■ Método estático
  • 14. Manejando hebras en Java 6 ● Soporte para aplicaciones concurrentes ○ Aplicación crea y maneja hebras ■ Mediante uso de clase Thread o interface Runnable ○ Pasar tareas concurrentes a clase Executor ■ API para crear y manejar hebras ■ Proporciona pool de hebras para aplicaciones de gran escala
  • 15. Sincronización  Sincronización  Keyword synchronized para indicar, bloque o método sincronizado, sólo una hebra puede ejecutarse dentro de bloque o método sincronizado  Paquete java.util.concurrent  Operaciones atómicas: (concurrent.atomic) • Acciones atómicas sobre variables volátiles • Variable volatile utilizada para decir a compilador que variable puede ser modificada por múltiples hebras y se necesita último valor almacenado  Estructuras de datos accesadas atomicamente • Colas, listas, tablas hash, etc.  Locks • Hasta java 1.4 cada objeto tiene un lock asociado • Desde java 1.5 construcciones de locks para locks, LectoresEscritores y locks reentrantes  Semáforos • Desde java 1.5 • http://java.sun.com/javase/6/docs/api/  Monitores • Usar keyword synchronized para exclusión mutua en métodos • Hasta java 1.4 sólo soportaba una variable de condición por objeto • wait() y notifyAll() como acciones en variable de condición (En Java, única por objeto) • Monitor tipo Mesa luego, wait() debe ser encerrado en ciclo while()
  • 16. Ejemplo Productor-Consumidor con semáforos import java.util.concurrent.Semaphore; public class QueuePC { private int size; private Object[] queue; private int inptr = 0; private int outptr = 0; private int count = 0; private Semaphore vacios; private Semaphore llenos; private Semaphore mutex; public QueuePC(Integer size) { this.size = size.intValue(); queue = new Object[size]; vacios = new Semaphore(size, true); llenos = new Semaphore(0, true); mutex = new Semaphore(1, true); }
  • 17. Productor consumidor Semáforos public void put(Object value) throws InterruptedException { vacios.acquireUninterruptibly();// WAIT() mutex.acquireUninterruptibly(); queue[inptr] = value; System.out.println("P : " + count); inptr = (inptr + 1) % size; count++; mutex.release();// SIGNAL() llenos.release(); }
  • 18. Productor consumidor Semáforos public Object get() throws InterruptedException { Object value; llenos.acquireUninterruptibly(); mutex.acquireUninterruptibly(); value = queue[outptr]; outptr = (outptr + 1) % size; count--; System.out.println("C : " + count); mutex.release(); vacios.release(); return value; }
  • 19. Productor consumidor Semáforos public class Producer extends Thread { private QueuePC buf; private int id; private static int number=0; public Producer(QueuePC buf, Integer id) { this.buf = buf; this.id = id.intValue(); this.setName(new String(id.toString())); } public void run() { for (int i = 1; i <= 50; i++) { try { System.out.println("Produciendo item : " + i); buf.put(new Integer(number++)); } catch (InterruptedException e) { System.out.println("Error al producir : " + e.getMessage()); } } } }
  • 20. Productor consumidor Semáforos public class Consumer extends Thread { private QueuePC buf; private int id; public Consumer(QueuePC buf, Integer id) { this.buf = buf; this.id = id.intValue(); this.setName(new String(id.toString())); } public void run() { for (int i = 1; i <= 50; i++) { try { Object j = buf.get(); System.out.println("tConsumiendo : " + j.toString()); } catch (InterruptedException e) { System.out.println("Error al consumir : " + e.getMessage()); } } } }
  • 21. Productor consumidor Semáforos import java.util.*; /** Clase que define test de prueba para Problema ProductorConsumidor usando semaforos */ public class TestSemPC { public static void main(String[] args){ QueuePC queue = new QueuePC(new Integer(1)); Producer prod1 = new Producer(queue, new Integer(1)); Consumer cons1 = new Consumer(queue, new Integer(1)); Producer prod2 = new Producer(queue, new Integer(2)); Consumer cons2 = new Consumer(queue, new Integer(2)); Producer prod3 = new Producer(queue, new Integer(3)); prod1.start(); prod2.start(); prod3.start(); cons1.start(); cons2.start(); } }